指定フォルダのファイル一覧を取得する
コマンドプロンプトで「dir /on /s > a.txt」と入力するとa.txtにそのフォルダ配下のサブフォルダも含めたファイルの一覧が取得できます。
これと同様にVBAでも指定フォルダ配下のサブフォルダに含まれるファイルの一覧を取得することができます。
処理概要
ここではFileSystemObjectを利用する方法になります。
- FileSystemObjectのGetFolderメソッドを使い、指定フォルダ配下のサブフォルダを取得します。
- 取得したサブフォルダの中にさらにサブフォルダがある場合を考慮して、関数を再帰呼び出しします。
- 引数のフォルダの中にあるファイルを取得します。ファイルは、FolderオブジェクトのFilesプロパティでファイルの一覧としてを取得します。
以下のソースコードではファイルの一覧を単純にDebug.Printでイミディエイトウインドウに出力していますが、実際にはファイル出力やセルへの貼り付けなどを行うことが多いと思いますので適宜変更してください。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
'// 引数a_sFolderは任意のフォルダパス Sub searchAllDirFile(a_sFolder As String) Dim oFso As FileSystemObject Dim oFolder As Folder Dim oSubFolder As Folder Dim oFile As File Set oFso = CreateObject("Scripting.FileSystemObject") '// フォルダがない場合 If (oFso.FolderExists(a_sFolder) = False) Then Exit Sub End If Set oFolder = oFso.GetFolder(a_sFolder) '// サブフォルダを再帰(サブフォルダを探す必要がない場合はこのFor文を削除してください) For Each oSubFolder In oFolder.SubFolders Call searchAllDirFile(oSubFolder.Path) Next '// カレントフォルダ内のファイルを取得 For Each oFile In oFolder.Files '// イミディエイトウインドウにファイル名を出力 Debug.Print oFile.ParentFolder & "\" & oFile.Name Next End Sub |
テスト用ソースコード
こちらは上の関数をテストするためのソースコードです。
実行するとVBEのイミディエイトウインドウにファイルの一覧が出力されます。
ここではファイルパスをC:\test\としています。
1 2 3 4 5 6 7 8 |
Sub searchAllDirFileTest() Dim sdir As String sdir = "C:\test\" Call searchAllDirFile(sdir) End Sub |
サブフォルダ配下の取得は不要な場合
上のソースではサブフォルダ配下までファイルを探しに行っていますが、サブフォルダは見なくていい場合があります。
その場合は、17行目から20行目までをコメントにするなどで削除してください。
指定フォルダにあるファイルのみを取得するようになります。
“VBAで指定フォルダのファイル一覧を取得” への1件のフィードバック