サイトについて      連絡先   検索

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

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:\)

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

関連ページ