Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】Dir()関数でファイル一覧を一瞬で取得!フォルダ操作の基本を完全解説

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\*.*")

 

戻り値は:

 
sample.xlsx

👉 フルパスが必要な場合は、

fullPath = "C:\TestFolder\" & fileName

 

と結合しましょう。


🧠 よくある初心者のつまずきポイント

症状 原因
1つしか取得できない ループ内で Dir() を呼んでいない
何も取得できない パスが間違っている
フォルダが対象外 Dir()は基本「ファイル用」

🔄 フォルダも含めて取得したい場合(補足)

fileName = Dir("C:\TestFolder\", vbDirectory)

 

※ ただし ... も含まれるため、
初心者のうちは ファイル専用で使うのがおすすめです。


✨ まとめ — Dir()はファイル操作マクロの入口!

できること Dir()
ファイル一覧取得
拡張子指定
一括処理
フォルダ探索 △(少し注意)

Dir() を覚えると、
✔ ファイル整理
✔ 自動集計
✔ 定期処理マクロ

が一気に作れるようになります。