更新日:、 作成日:

VBA ファイルの一覧を取得

はじめに

Excel VBA マクロでファイルの一覧を取得する方法を紹介します。

GetFolder 関数を使って指定したフォルダを取得し、Files プロパティからファイルの一覧を取得できます。

ワイルドカードを使ってファイルの絞り込みができます。

フォルダの一覧を取得するには「フォルダの一覧を取得」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

ファイルの一覧を取得

指定したフォルダのファイル一覧を取得

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim fl As Folder
Set fl = fso.GetFolder("D:\") ' フォルダを取得

Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
    Debug.Print(f.Name) ' ファイルの名前 (Tips.txt) など
    Debug.Print(f.Path) ' ファイルのパス (D:\Tips.txt) など
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数でファイルの一覧を取得したい Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。

f.Name プロパティから、そのファイルの拡張子付きの名前を取得できます。

f.Path プロパティから、そのファイルのパスを取得できます。

ファイル一覧をフィルタリングする

For Each f In fl.Files
    If LCase(f.Name) Like "tips*.txt" Then
        Debug.Print(f.Name) ' tips で始まる .txt ファイル
    End If
Next

Like 演算子を使って、ワイルドカードでファイルの絞り込みができます。「LCase 関数」を使って小文字にしているのは、大文字と小文字を区別しないようにするためです。

パターン 説明 使用例 一致例
?任意の 1 文字あい?あいう, あいか, あいも
*0 個以上の文字*ABAB, 0AB, 10AB
#任意の 1 桁 (0–9)##10, 22, 59
[charlist]charlist に含まれる任意の 1 文字[A-C]
[A, H, L]?
A, B, C
A1, H2, L3
[!charlist]charlist に含まれない任意の 1 文字[!A-C]
[!A, B, C]?
D, E, F
[パターン]パターンの文字 ? * # [ ] と比較する[*]?*あ, *い, *A

Like 演算子について詳しくは「演算子」をご覧ください

フォルダの操作

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim cfl As Folder
Set cfl = fso.GetFolder("D:\TipsFolder\") ' フォルダを取得

Dim fl As Folder
For Each fl In cfl.SubFolders ' サブフォルダの一覧を取得
    Debug.Print(fl.Path) ' D:\TipsFolder\Sub など
Next

Dim pfl As Folder
Set pfl = cfl.ParentFolder ' 親フォルダを取得 (D:\)

フォルダのパスの取得について詳しくは「ファイルやフォルダのパスを取得」をご覧ください