VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】フォルダ内のファイル名を順番に取得してExcelに書き出す方法|Dir・FSOで一覧化

日々の業務で、特定のフォルダに入っているファイルを確認するとき、1つ1つ名前をメモしたり並べ替えたりすると、思った以上に時間が奪われてしまいます。「今月の請求書フォルダに何が入っているか一覧を作りたい」「分析前にファイル名を一度整理したい」など、Excelでリスト化したくなる場面は頻繁にあります。しかし、手作業でコピーして貼り付ける方法では効率が悪く、ファイル数が多いほどミスも増えてしまいます。

そこで役立つのが VBAでフォルダ内のファイル名を一覧取得する方法 です。
VBAを使えば、指定したフォルダ内のファイルを順番に読み取り、Excelへ自動的に書き出すことができます。ファイル名だけでなく、更新日時・ファイルサイズ・拡張子なども取得できるため、実務の整理やデータ分析前の準備がスムーズになります。

この記事では、VBA初心者でも理解しやすいように、Dir関数を使った最もシンプルな方法 と、情報量の多いFSO(FileSystemObject)を使う方法 の2種類を丁寧に解説します。また、業務での活用例、注意点、RPAツールと組み合わせた応用まで紹介し、実務で活かせる内容にまとめています。

目次

✅ フォルダ内のファイル名を取得する基本|VBAなら一瞬で一覧化できる

・Dir関数とは?最もシンプルにファイル名を取得する方法

Dir関数は、Windows上のファイル名を取得するための基本的なVBA関数です。
指定したフォルダパスとワイルドカード(例:*.xlsx)を渡すことで、該当する最初のファイル名を取得し、Dir 関数を再度呼び出すことで次々とファイル名が返されます。

メリット

  • 速い
  • コードが短い
  • 追加の参照設定不要

デメリット

  • 取得できるのは「ファイル名のみ」
  • 更新日時など詳細情報は取得できない

・FileSystemObject(FSO)とは?情報量の多いファイル取得

FSOは Microsoft Scripting Runtime を利用した高度なファイル操作オブジェクトです。
ファイル名に加え、以下のような情報を取得できます:

  • フルパス
  • 作成日
  • 更新日
  • ファイルサイズ
  • 拡張子

メリット

  • 実務で必要な情報がほぼすべて取得可能
  • 拡張性が高い
  • フォルダの階層取得なども可能

デメリット

  • 参照設定が必要(早期バインディングの場合)
  • Code量が増える

✅ Dir関数でファイル名を順番に取得し、Excelに書き出す方法

・まず最も基本的なファイル一覧取得コード

以下は、指定フォルダ内のExcelファイル(.xlsx)を取得し、A列に書き出すサンプルです。

Sub GetFileNames_Dir()

    Dim folderPath As String
    Dim fileName As String
    Dim row As Long

    folderPath = "C:\Test\Files\"   '最後に「\」を付ける
    fileName = Dir(folderPath & "*.xlsx")
    row = 2

    Range("A1").Value = "ファイル名一覧"

    Do While fileName <> ""
        Cells(row, 1).Value = fileName
        row = row + 1
        fileName = Dir
    Loop

End Sub

・コード手順の解説(理解しやすいよう丁寧に分解)

  1. folderPath に対象フォルダを指定
  2. Dir(folderPath & "*.xlsx")
    → 最初の一致ファイル名を取得
  3. Do While fileName <> ""
    → ファイルがなくなるまで繰り返す
  4. Cells(row,1).Value に書き込み
    → ExcelのA列に順番に出力
  5. fileName = Dir
    → Dir の引数なしで次のファイル取得
  6. ループが終わったら一覧が完成

Dir関数はシンプルですが、実務ではとても使いやすく、ファイル名だけわかれば十分な場合に最適です。


・拡張子を問わず取得したい場合

fileName = Dir(folderPath & "*.*")

・サブフォルダも含めて取得したい場合(少し応用)

Dir関数だけではサブフォルダ内検索はできません。
サブフォルダも含めたい場合は、FSOを使う方法がベストです(後述)。


✅ FileSystemObject(FSO)でファイル一覧+詳細情報を取得する方法

・FSOを使う準備(参照設定)

  1. VBA画面で ツール → 参照設定
  2. Microsoft Scripting Runtime にチェック

これで FSO を効率的に扱えるようになります。


・FSOを使ったファイル一覧取得コード(実務向け)

Sub GetFileNames_FSO()

    Dim fso As FileSystemObject
    Dim folder As Folder
    Dim file As file
    Dim folderPath As String
    Dim row As Long

    folderPath = "C:\Test\Files\"
    row = 2

    Set fso = New FileSystemObject
    Set folder = fso.GetFolder(folderPath)

    Range("A1").Value = "ファイル名"
    Range("B1").Value = "フルパス"
    Range("C1").Value = "更新日時"
    Range("D1").Value = "サイズ"

    For Each file In folder.Files
        Cells(row, 1).Value = file.Name
        Cells(row, 2).Value = file.Path
        Cells(row, 3).Value = file.DateLastModified
        Cells(row, 4).Value = file.Size
        row = row + 1
    Next file

End Sub

・手順解説

  1. FileSystemObjectを作成
  2. GetFolder でフォルダを取得
  3. folder.Files でファイル一覧を取得
  4. For Each で1件ずつ処理
  5. Excelに情報を書き出す

更新日時やサイズが取得できるのはFSOの大きな強みです。

参考:【ChatGPT】ファイル名取得・リネームVBAを作成する方法|大量ファイルを一括処理で業務改善




✅ 実務での活用例|どんな場面で役立つのか?

・例1:月次処理のファイルを一覧化

請求書・レポート・日報などを一度リスト化して整理したい場面。

・例2:分析対象ファイルの準備

大量のCSVファイルを扱うとき、一覧を先に作っておくと分析作業がスムーズ。

・例3:ファイルの整理・重複チェック

更新日時を確認し、古いファイルを削除する仕組みも作りやすい。

・例4:監査資料のためのフォルダ状況の書き出し

監査で「フォルダにどのファイルが存在するか」を提出するときに便利。


❗ 注意点とトラブル対処

・フォルダパスの末尾に「\」を必ずつける

付けないと Dir や FSO が失敗します。

参考:【VBA】ファイルを選択して開く方法|Application.GetOpenFilenameとWorkbooks.Openの実践例

・パスに日本語が含まれる場合

基本的には問題ありませんが、ネットワークドライブの場合は権限に注意。

・サブフォルダを含めたいとき

FSO の再帰処理が必要です。


✅ フォルダ全サブフォルダを含めて取得(応用)

サブフォルダも一覧化したい場合は、再帰処理(自分自身を呼び出す処理)を使います。

Sub GetAllFiles(folderPath As String, row As Long)

    Dim fso As New FileSystemObject
    Dim folder As Folder
    Dim subFolder As Folder
    Dim file As file

    Set folder = fso.GetFolder(folderPath)

    For Each file In folder.Files
        Cells(row, 1).Value = file.Name
        Cells(row, 2).Value = file.Path
        row = row + 1
    Next file

    For Each subFolder In folder.SubFolders
        Call GetAllFiles(subFolder.Path, row)
    Next subFolder

End Sub

❗ RPA(UiPath / Power Automate)との相性も抜群

フォルダ操作は、RPAの前処理でもよく使われます。

例:

  • UiPathでファイルを名前順に読み込む
  • Power AutomateでExcelへデータ入力する
  • ChatGPTでファイル内容からレポート生成

Excel側で事前に ファイル一覧を自動作成 しておくと、RPAのフロー設計が非常に楽になります。

あなたのブログの読者層も「Excel×RPA×AI」の領域に関心が高いので、このような応用紹介は滞在時間と満足度につながります。


❗ よくある質問(まとめ)

・ファイル名だけで良い場合はどちらが向いていますか?

→ Dir関数(速い)

・詳細情報も必要です。どうすれば?

→ FSO(機能豊富)

・Excelファイル以外も取得できますか?

→ ".xlsx" を ".*" に変更


✅ まとめ:フォルダ内ファイル名の一覧化はVBAが最速で最も実務的

VBAを使えば、フォルダ内のファイル名取得は数秒で自動化できます。

  • Dir関数:最速で簡単
  • FSO:情報量が多く実務向き
  • サブフォルダも取得可能
  • 更新日時やサイズも一覧化できる
  • RPAやChatGPTと組み合わせればさらに強力

フォルダのファイル一覧化は、実務の整理・監査対応・データ分析前の準備など、あらゆる場面で役立つテクニックです。日々の業務を効率化したい方は、ぜひ本記事のコードを活用して、自動化の第一歩を踏み出してみてください。

    -VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作