VBAでフォルダ内のファイル名を一覧化する方法|Dir関数で自動書き出し

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")

ファイルサイズや更新日時も一覧に加えるには?

FileLenFileDateTime を組み合わせると、ファイルサイズや更新日時も一緒に書き出せます。

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") のように拡張子を指定する。
  • サブフォルダは対象外:このコードではサブフォルダ内のファイルは取得されない。
  • 応用FileLenFileDateTime を使うとサイズや日時も取得できる。

よくある質問

フォルダパスの指定で¥を忘れるとどうなる?

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ファイルとして保存することはできる?

できます。書き出し後のシートを SaveAsxlCSV 形式で保存すれば、CSV形式で出力できます。他のシステムへのデータ連携にも使えます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール