はじめに
VBAで作業をしていると、
「フォルダ内のファイルを一覧にしたい」
「特定の拡張子だけを取得したい」
「日次処理でファイルを順番に読み込みたい」
そんな場面がよくあります。
ここでは、フォルダ内のファイル一覧を取得する方法を、
やさしく、実務目線でまとめて解説します。
まずはコードを確認(もっともシンプル)
Dim file As String
file = Dir("C:\Data\*.*")
Do While file <> ""
Debug.Print file
file = Dir
Loop
Dir 関数を使った、もっとも軽くてシンプルな方法です。
Dir 関数でファイル一覧を取得する
基本形
Dim f As String
f = Dir("C:\Data\*.*")
Do While f <> ""
Debug.Print f
f = Dir
Loop
- *.* は「すべてのファイル」を意味します
- Dir を繰り返し呼び出すことで次のファイルを取得します
拡張子を絞り込む
Excelファイルだけ取得する
f = Dir("C:\Data\*.xlsx")
CSVだけ取得する
f = Dir("C:\Data\*.csv")
複数拡張子を扱う場合
f = Dir("C:\Data\*.xls*") 'xls, xlsx, xlsm など
ファイル名とフルパスを取得する
Dir はファイル名だけ返すため、
フルパスが必要な場合は結合します。
Dim path As String
Dim f As String
path = "C:\Data\"
f = Dir(path & "*.xlsx")
Do While f <> ""
Debug.Print path & f
f = Dir
Loop
具体的な例で理解する
ファイル一覧をシートに書き出す
Dim path As String
Dim f As String
Dim row As Long
path = "C:\Data\"
f = Dir(path & "*.*")
row = 1
Do While f <> ""
Cells(row, 1).Value = f
row = row + 1
f = Dir
Loop
一覧表を作る実務でよく使うパターンです。
最新ファイルを探す
Dim path As String
Dim f As String
Dim latest As String
path = "C:\Data\"
f = Dir(path & "*.*")
Do While f <> ""
If latest = "" Then
latest = f
ElseIf FileDateTime(path & f) > FileDateTime(path & latest) Then
latest = f
End If
f = Dir
Loop
MsgBox "最新ファイル:" & latest
日次処理で便利な“最新ファイル取得”です。
FileSystemObject を使う方法(柔軟で実務向き)
Dir よりも柔軟に扱える方法です。
Dim fso As Object
Dim folder As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Data")
For Each file In folder.Files
Debug.Print file.Name
Next
特徴
- ファイルサイズ、更新日などの情報も取得できる
- サブフォルダの探索も簡単
- 実務ではこちらを使う場面が多い
サブフォルダも含めて一覧を取得する
Sub ListFilesRecursive(path As String)
Dim fso As Object
Dim folder As Object
Dim subFolder As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
For Each file In folder.Files
Debug.Print file.Path
Next
For Each subFolder In folder.SubFolders
ListFilesRecursive subFolder.Path
Next
End Sub
フォルダ構造全体を探索できます。
注意点(実務で気をつけたいこと)
- Dir は途中で他の Dir を呼ぶとリセットされる
→ 1つの処理でまとめて使うのが安全。
- ネットワークフォルダは遅い
→ FileSystemObject の方が安定することが多い。
- ファイルが多いと時間がかかる
→ 拡張子で絞ると高速化できます。
- パスの末尾に「\」を忘れない
→ “C:\Data” と “C:\Data\” は別物。
まとめ
- Dir 関数は軽くてシンプル、基本の方法
- FileSystemObject は柔軟で実務向き
- 拡張子の絞り込み、フルパス取得、最新ファイル取得など応用が豊富
- サブフォルダ探索も可能
- ファイル一覧取得は“外部データとの入口”としてとても重要
ファイル一覧を取得できると、
データ処理の幅がぐっと広がります。

フォルダの中身を自動で一覧にできると、
毎日の確認作業がすっと楽になります。
VBAは、そんな小さな手間を静かに支えてくれます。

フォルダの中をのぞくのって、ちょっとワクワクするよね。
VBAなら、その中身をきれいに並べてくれるよ。

コメント