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