更新日:、 作成日:
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 個以上の文字 | *AB | AB, 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:\)
フォルダのパスの取得について詳しくは「ファイルやフォルダのパスを取得」をご覧ください
スポンサーリンク