
Excelマクロを書いていて、こんなことをしたくなったことはありませんか?
-
フォルダ内のファイル一覧を取得したい
-
拡張子が「.xlsx」だけを処理したい
-
毎日増えるログファイルを自動でチェックしたい
そんなときに活躍するのが Dir() 関数です。
実はこの関数、ファイル操作系マクロの第一歩とも言える超重要関数なんです。
🔍 Dir()関数とは?
Dir() は、
👉 指定したフォルダ内のファイル名を1つずつ取得する関数 です。
基本イメージ
Dir() → 最初のファイル名
Dir() → 次のファイル名
Dir() → 次のファイル名
...
Dir() → ""(もう無い)
つまり、繰り返し処理(ループ)とセットで使う関数です。
🧩 基本の使い方(最重要)
Sub GetFileList()
Dim fileName As String
fileName = Dir("C:\TestFolder\*.*")
Do While fileName <> ""
Debug.Print fileName
fileName = Dir()
Loop
End Sub
ポイント解説
-
最初の
Dir("パス")→ 検索開始 -
2回目以降の
Dir()→ 次のファイル -
すべて取得し終わると
""(空文字)になる
これが Dir()の基本パターン です。
📁 特定の拡張子だけ取得する
Excelファイル(.xlsx)だけ処理したい場合👇
Sub GetExcelFiles()
Dim fileName As String
fileName = Dir("C:\TestFolder\*.xlsx")
Do While fileName <> ""
Debug.Print fileName
fileName = Dir()
Loop
End Sub
よく使う指定例
| 指定 | 意味 |
|---|---|
*.xlsx |
Excelファイルのみ |
*.csv |
CSVファイルのみ |
*.* |
すべてのファイル |
report_*.txt |
report_で始まるtxt |
🪄 実務でよくある使い道
① フォルダ内のファイルを一括処理
' ファイルを1つずつ開いて処理
Workbooks.Open "C:\TestFolder\" & fileName
② ファイル名をシートに一覧表示
Cells(i, 1).Value = fileName
③ ファイル名に特定の文字が含まれるかチェック
If InStr(fileName, "2025") > 0 Then
' 2025年のファイルだけ処理
End If
⚠ Dir()関数の注意点(超重要)
❌ 1つのDirを同時に使えない
Dir("C:\FolderA\*.*")
Dir("C:\FolderB\*.*") ' ← 前のDirはリセットされる
👉 Dir()は同時に複数使えません
別フォルダを扱う場合は、処理を分ける必要があります。
❌ フルパスは返ってこない
fileName = Dir("C:\TestFolder\*.*")
戻り値は:
👉 フルパスが必要な場合は、
fullPath = "C:\TestFolder\" & fileName
と結合しましょう。
🧠 よくある初心者のつまずきポイント
| 症状 | 原因 |
|---|---|
| 1つしか取得できない | ループ内で Dir() を呼んでいない |
| 何も取得できない | パスが間違っている |
| フォルダが対象外 | Dir()は基本「ファイル用」 |
🔄 フォルダも含めて取得したい場合(補足)
fileName = Dir("C:\TestFolder\", vbDirectory)
※ ただし . や .. も含まれるため、
初心者のうちは ファイル専用で使うのがおすすめです。
✨ まとめ — Dir()はファイル操作マクロの入口!
| できること | Dir() |
|---|---|
| ファイル一覧取得 | ◎ |
| 拡張子指定 | ◎ |
| 一括処理 | ◎ |
| フォルダ探索 | △(少し注意) |
Dir() を覚えると、
✔ ファイル整理
✔ 自動集計
✔ 定期処理マクロ
が一気に作れるようになります。