VBAでフォルダ内のファイル名を一覧化するには、Dir 関数でファイルを1つずつ取得して、セルに書き込むループを使います。10行ほどのコードで、フォルダ内の全ファイル名を自動でExcelに書き出せます。
この記事では、次の内容を順番に解説します。
- ファイル名一覧を作る基本のコード
- コードの各部分の解説
- 拡張子で絞り込む応用
ファイル名一覧を作るコードは?
次のコードを実行すると、指定したフォルダ内のファイル名がA列に1行ずつ書き出されます。
Sub ListFileNames()
Dim folderPath As String
Dim fileName As String
Dim i As Long
' 調べたいフォルダのパスを指定する
folderPath = "C:¥Test¥"
' パスの末尾に¥がなければ追加する
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
' フォルダ内の最初のファイル名を取得する
fileName = Dir(folderPath & "*.*")
' ファイルがなくなるまでA列に書き出す
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
i = i + 1
fileName = Dir() ' 次のファイルに進む
Loop
End Sub
コードの流れ
folderPathに調べたいフォルダのパスを指定します。実際のフォルダパスに変更してください。Right(folderPath, 1) <> "¥"でパスの末尾に¥がなければ自動で追加します。これがないとDirがうまく動かないことがあります。Dir(folderPath & "*.*")でフォルダ内の最初のファイル名を取得します。*.*はすべてのファイルを対象にするワイルドカードです。Do While fileName <> ""でファイルが見つかる間ループを続けます。Dir()(引数なし)で次のファイルに進みます。
特定の拡張子のファイルだけに絞るには?
*.* の部分を変えると、特定の拡張子のファイルだけを対象にできます。
' xlsxファイルだけを対象にする
fileName = Dir(folderPath & "*.xlsx")
' csvファイルだけを対象にする
fileName = Dir(folderPath & "*.csv")
ファイルサイズや更新日時も一覧に加えるには?
FileLen と FileDateTime を組み合わせると、ファイルサイズや更新日時も一緒に書き出せます。
Do While fileName <> ""
Cells(i, 1).Value = fileName ' ファイル名
Cells(i, 2).Value = FileLen(folderPath & fileName) ' ファイルサイズ(バイト)
Cells(i, 3).Value = FileDateTime(folderPath & fileName) ' 更新日時
i = i + 1
fileName = Dir()
Loop
まとめ
- 基本の流れ:
Dirでファイルを1つずつ取得 → セルに書き込む →Dir()で次へ進む、をループで繰り返す。 - 拡張子で絞る:
Dir(folderPath & "*.xlsx")のように拡張子を指定する。 - サブフォルダは対象外:このコードではサブフォルダ内のファイルは取得されない。
- 応用:
FileLenやFileDateTimeを使うとサイズや日時も取得できる。
よくある質問
フォルダパスの指定で¥を忘れるとどうなる?
Dirがうまく動かず、ファイルが見つからない状態になります。コードの中に If Right(folderPath, 1) <> "¥" Then folderPath = folderPath & "¥" を入れておくと、¥の有無に関わらず正しく動きます。
サブフォルダ内のファイルも取得したい場合は?
Dirだけではサブフォルダ内のファイルは取得できません。サブフォルダも含めて一覧化したい場合は、FileSystemObject(FSO)を使った再帰的な処理が必要になります。少し上級者向けの内容ですが、FSOを使うとフォルダを階層ごとに処理できます。
フォルダをダイアログで選択させたい場合は?
folderPath = "C:¥Test¥" の部分を Application.FileDialog(msoFileDialogFolderPicker) に置き換えると、マクロ実行時にフォルダ選択のダイアログが表示されます。フォルダパスをコードに直書きしなくて済むので、使い回しやすくなります。
ファイルが見つからない場合はどうなる?
指定したフォルダにファイルが1つもない場合、Dir が最初から空文字を返すため、ループが実行されずにマクロが終了します。エラーにはなりませんが、「対象ファイルがありませんでした」のメッセージを出したい場合は、ループ後に If i = 1 Then MsgBox "ファイルが見つかりませんでした" を追加した方がわかりやすいです。
一覧をCSVファイルとして保存することはできる?
できます。書き出し後のシートを SaveAs で xlCSV 形式で保存すれば、CSV形式で出力できます。他のシステムへのデータ連携にも使えます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



