フォルダを指定してファイル名一覧を取得するVBAの改良版
前回作成したVBAを使ってて不便な点が1つ出てきたので考えました。
よくよく考えるとフォルダ名一覧を1個のファイルにまとめたいよなぁ。
だって大体が一まとめにしないといけないケースが多いわけだし。
ということでモジュール側でファイル一覧を1個のEXCELにシートを追加して
出力できるように改修しました。モジュール側だけ改修したんでそっちだけ
モジュール側
-----------------------------------------------
よくよく考えるとフォルダ名一覧を1個のファイルにまとめたいよなぁ。
だって大体が一まとめにしないといけないケースが多いわけだし。
ということでモジュール側でファイル一覧を1個のEXCELにシートを追加して
出力できるように改修しました。モジュール側だけ改修したんでそっちだけ
モジュール側
-----------------------------------------------
Option Explicit 'refer ' http://ameblo.jp/gidgeerock/entry-11584846307.html ' https://oshiete.goo.ne.jp/qa/1828986.html ' http://officetanaka.net/excel/vba/file/file07.htm ' http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html ' http://officetanaka.net/excel/vba/tips/tips39.htm ' https://gist.github.com/gitspopovic/2963865 ' http://vba-geek.jp/blog-entry-294.html ' http://vbaexcel.seesaa.net/article/148305417.html ' http://d.hatena.ne.jp/bhunji2000/20091030/1258133771 ' http://www.239-programing.com/excel-vba/func/func072.html ' v2 ref ' https://www.moug.net/tech/exvba/0150120.html ' http://officetanaka.net/excel/vba/sheet/sheet03.htm ' http://hensa40.cutegirl.jp/archives/705 ' http://www.niji.or.jp/home/toru/notes/8.html ' http://officetanaka.net/excel/vba/tips/tips130.htm ' http://excel-ubara.com/excelvba4/EXCEL222.html ' http://www.officepro.jp/excelvba/sheet/index2.html ' https://support.microsoft.com/ja-jp/help/950220 ' ' 対象のフォルダからファイル名一覧を取得してEXCELシートに保存する ' Function getFileName(inFile As Variant, outFile As Variant) Const ROWA = "A" 'A列 Const ROWB = "B" 'B列 Dim f As Object Dim saveBook As Object Dim saveSheet As Object Dim sheetsName As String Dim fullPath As String Dim ws As String 'シート存在判定用 Dim i As Long 'シート計数用 Dim j As Long 'セルの行カウンター Dim firstSheet As Long Dim cellChecker As Long '保存先指定 Set saveBook = Workbooks.Open(outFile) Application.DisplayAlerts = False Application.Visible = False With CreateObject("Scripting.FileSystemObject") 'カウンター初期化 i = 1 j = 1 'シート名設定 sheetsName = .GetFolder(inFile).Name 'シート存在判定 For i = 1 To saveBook.Worksheets.Count firstSheet = i '同じシート名が存在する場合は別のシート名にする。 'EXCELのシート名は31文字までなので制限に引っかからないように文字数を制限 If sheetsName = saveBook.Worksheets(i).Name Then sheetsName = Left(sheetsName, 10) & "_" & Format(Now, "yyyymmddhhmmss") End If 'シートにデータが存在しない場合には該当のシートに追記する。 If saveBook.Worksheets(i).Cells(Rows.Count, 1).End(xlUp).Row = 1 Then Exit For End If '追加が必要な場合はシートを追加する。 If i = saveBook.Worksheets.Count Then saveBook.Worksheets.Add after:=saveBook.Worksheets(firstSheet) firstSheet = firstSheet + 1 Exit For End If Next i saveBook.Worksheets(firstSheet).Activate '指定したフォルダのファイル名を取得する For Each f In .GetFolder(inFile).Files fullPath = inFile & "\" & f.Name saveBook.Worksheets(firstSheet).Range(ROWA & j) = f.Name saveBook.Worksheets(firstSheet).Range(ROWB & j) = fullPath saveBook.Worksheets(firstSheet).Hyperlinks.Add Anchor:=Range(ROWB & j), Address:=fullPath j = j + 1 Next f End With 'セルの整形とシート名の変更 saveBook.Worksheets(firstSheet).Range(ROWA & ":" & ROWB).Columns.AutoFit saveBook.Worksheets(firstSheet).Name = sheetsName '保存先EXCELを閉じる saveBook.Close Savechanges:=True Set saveBook = Nothing MsgBox ("処理が完了しました。") 'ActiveWorkbook.Close False Application.Visible = True Application.DisplayAlerts = True End Function
後は以下があればばっちりだな。
1.EXCELシートのシート名を引いてくるのと選択式にする。
2.ファイル名を再帰的に取得するのかしないのかを選択式にする
3.再帰的に取得する場合にフォルダ名も取得するのか選択式にする
4.フォルダ名の取得を選択式にする。
というか個別に作ってもいいんじゃね?
とか思いつつ
コメント