更新日:、 作成日:

VBA フォルダの一覧を取得

はじめに

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

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

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

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

FileSystemObject について

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

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

フォルダの一覧を取得

サブフォルダを取得

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

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

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

' 後始末
Set fso = Nothing

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

pfl.SubFolders プロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。

fl.Name プロパティから、そのフォルダの名前を取得できます。

fl.Path プロパティから、そのフォルダのパスを取得できます。

フォルダ一覧をフィルタリングする

For Each fl In pfl.SubFolders
    If LCase(fl.Name) Like "tips*" Then
        Debug.Print(fl.Name) ' tips で始まるフォルダ
    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:\)

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