コマンドプロンプトのDIRコマンドを使ってファイル名一覧を作成する方法をご紹介しています。
同じようなことを、Excelマクロでやりたいということも実務では、よくあります。
ファイル名一覧を作成するサンプルマクロ
いくつかの方法が考えられますが、ここではFileSystemObjectを使わない、VBA(Visual Basic for Applications)標準のDir関数を使ったマクロをご紹介します。
Dim dlg As FileDialog
Dim fol_path As String 'フォルダのフルパス
Dim f_name As String 'ファイル名
Dim i As Long 'ファイル名を出力する行番号
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
If dlg.Show = False Then Exit Sub 'キャンセル時
fol_path = dlg.SelectedItems(1) 'フォルダのフルパスを格納
f_name = Dir(fol_path & "\*") 'フォルダ内の一つ目のファイル名を取得
If f_name = "" Then
MsgBox fol_path & " にはファイルが存在しません。"
Exit Sub
End If
Worksheets.Add Before:=Sheets(1)
Range("A1").Value = fol_path
Range("A2").Value = "のファイル一覧"
Range("A4").Value = "ファイル名"
'A5セルから下にファイル名を書き出し
i = 5
Do Until f_name = ""
Cells(i, "A").Value = f_name
i = i + 1
'次のファイル名を取得
f_name = Dir
Loop
End Sub
上記のマクロを実行すると、フォルダを指定するためのダイアログが表示され、ファイルが存在していれば、ブックの先頭にシートを挿入して、A5セルから下に向かってファイル名一覧が作成されます。
サンプルマクロの解説
フォルダを指定するモードでFileDialogを表示して、
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
指定されたフォルダのフルパスを変数に格納します。
fol_path = dlg.SelectedItems(1)
Dir関数を使って、指定されたフォルダ内の一つ目のファイル名を取得して、変数・f_nameに格納します。
f_name = Dir(fol_path & "\*")
Do Until ~ Loop文で、Dir関数が値を返さなくなるまでループをまわし、A5セルから下にファイル名を書きだしていきます。
i = 5
Do Until f_name = ""
Cells(i, "A").Value = f_name
i = i + 1
f_name = Dir
Loop
Dir関数は、引数を指定せずに呼ばれるたときに、直前に指定されたのと同じ引数で、既にみつかっているファイルを除外したファイル名を返す、という仕様を利用して、指定されたフォルダ内のファイル名を順番に取得しているマクロです。
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » ファイル名一覧を作成するExcelマクロ-Dir関数