【Excel VBA】フォルダ内のファイル一覧を取得する基本コードとやさしい解説

VBA & Excel
スポンサーリンク
スポンサーリンク

はじめに

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 は柔軟で実務向き
  • 拡張子の絞り込み、フルパス取得、最新ファイル取得など応用が豊富
  • サブフォルダ探索も可能
  • ファイル一覧取得は“外部データとの入口”としてとても重要

ファイル一覧を取得できると、
データ処理の幅がぐっと広がります。


decopon
decopon

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

moco
moco

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

コメント

タイトルとURLをコピーしました