日々の業務で、特定のフォルダに入っているファイルを確認するとき、1つ1つ名前をメモしたり並べ替えたりすると、思った以上に時間が奪われてしまいます。「今月の請求書フォルダに何が入っているか一覧を作りたい」「分析前にファイル名を一度整理したい」など、Excelでリスト化したくなる場面は頻繁にあります。しかし、手作業でコピーして貼り付ける方法では効率が悪く、ファイル数が多いほどミスも増えてしまいます。
そこで役立つのが VBAでフォルダ内のファイル名を一覧取得する方法 です。
VBAを使えば、指定したフォルダ内のファイルを順番に読み取り、Excelへ自動的に書き出すことができます。ファイル名だけでなく、更新日時・ファイルサイズ・拡張子なども取得できるため、実務の整理やデータ分析前の準備がスムーズになります。
この記事では、VBA初心者でも理解しやすいように、Dir関数を使った最もシンプルな方法 と、情報量の多いFSO(FileSystemObject)を使う方法 の2種類を丁寧に解説します。また、業務での活用例、注意点、RPAツールと組み合わせた応用まで紹介し、実務で活かせる内容にまとめています。
目次
- ✅ フォルダ内のファイル名を取得する基本|VBAなら一瞬で一覧化できる
- ・Dir関数とは?最もシンプルにファイル名を取得する方法
- ・FileSystemObject(FSO)とは?情報量の多いファイル取得
- ✅ Dir関数でファイル名を順番に取得し、Excelに書き出す方法
- ・まず最も基本的なファイル一覧取得コード
- ・コード手順の解説(理解しやすいよう丁寧に分解)
- ・拡張子を問わず取得したい場合
- ・サブフォルダも含めて取得したい場合(少し応用)
- ✅ FileSystemObject(FSO)でファイル一覧+詳細情報を取得する方法
- ・FSOを使う準備(参照設定)
- ・FSOを使ったファイル一覧取得コード(実務向け)
- ・手順解説
- ✅ 実務での活用例|どんな場面で役立つのか?
- ・例1:月次処理のファイルを一覧化
- ・例2:分析対象ファイルの準備
- ・例3:ファイルの整理・重複チェック
- ・例4:監査資料のためのフォルダ状況の書き出し
- ❗ 注意点とトラブル対処
- ・フォルダパスの末尾に「\」を必ずつける
- ・パスに日本語が含まれる場合
- ・サブフォルダを含めたいとき
- ✅ フォルダ全サブフォルダを含めて取得(応用)
- ❗ RPA(UiPath / Power Automate)との相性も抜群
- ❗ よくある質問(まとめ)
- ・ファイル名だけで良い場合はどちらが向いていますか?
- ・詳細情報も必要です。どうすれば?
- ・Excelファイル以外も取得できますか?
- ✅ まとめ:フォルダ内ファイル名の一覧化はVBAが最速で最も実務的
✅ フォルダ内のファイル名を取得する基本|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
・コード手順の解説(理解しやすいよう丁寧に分解)
- folderPath に対象フォルダを指定
- Dir(folderPath & "*.xlsx")
→ 最初の一致ファイル名を取得 - Do While fileName <> ""
→ ファイルがなくなるまで繰り返す - Cells(row,1).Value に書き込み
→ ExcelのA列に順番に出力 - fileName = Dir
→ Dir の引数なしで次のファイル取得 - ループが終わったら一覧が完成
Dir関数はシンプルですが、実務ではとても使いやすく、ファイル名だけわかれば十分な場合に最適です。
・拡張子を問わず取得したい場合
fileName = Dir(folderPath & "*.*")
・サブフォルダも含めて取得したい場合(少し応用)
Dir関数だけではサブフォルダ内検索はできません。
サブフォルダも含めたい場合は、FSOを使う方法がベストです(後述)。
✅ FileSystemObject(FSO)でファイル一覧+詳細情報を取得する方法
・FSOを使う準備(参照設定)
- VBA画面で ツール → 参照設定
- 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
・手順解説
- FileSystemObjectを作成
- GetFolder でフォルダを取得
- folder.Files でファイル一覧を取得
- For Each で1件ずつ処理
- 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と組み合わせればさらに強力
フォルダのファイル一覧化は、実務の整理・監査対応・データ分析前の準備など、あらゆる場面で役立つテクニックです。日々の業務を効率化したい方は、ぜひ本記事のコードを活用して、自動化の第一歩を踏み出してみてください。