以前、フォルダ配下の複数ファイルを一括で処理する方法を紹介しました。
しかし、フォルダ配下に年月単位のフォルダが作成されており、必要なファイルはその下のフォルダにあることが良くあります。そこで、フォルダ配下のファイル一覧を再帰的に取得する方法を紹介します。
FileSystemObject を使って解決する
EXCEL VBAでフォルダ・ファイル関連の処理をするには、FileSystemObjectを利用するのが近道で安全です。紹介するサンプルプログラムでもFileSystemObjectを使用しています。
ただし、サンプルプログラムを動かすには、VBEの参照設定を変更する必要があります。FileSystemObjectを利用するために、ツール – 参照設定にて、Microsoft Scripting Runtimeにチェックを入れる必要があります。 詳細は以下の記事を参照してください。
前回の記事ではファイル一覧を取得する際に「fso.GetFolder(path).Files」を使用しましたが、今回はフォルダ一覧も取得する必要があるため「fso.GetFolder(path).SubFolders」も使用します。
サンプルプログラムを確認する(コピペOK)
Sub sample()
Call getFilesRecursive("C:\Drivers")
End Sub
Sub getFilesRecursive(path As String)
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Dim objFolder As folder
Dim objFile As file
' GetFolder(フォルダ名).SubFoldersでフォルダ配下のフォルダ一覧を取得
For Each objFolder In fso.GetFolder(path).SubFolders
Call getFilesRecursive(objFolder.path)
Next
' GetFolder(フォルダ名).Filesでフォルダ配下のファイル一覧を取得
For Each objFile In fso.GetFolder(path).Files
Call execute(objFile)
Next
End Sub
Sub execute(f As file)
' ファイル毎に処理する内容を記述する。今回はファイル名を出力するのみ。
Debug.Print f.Name
End Sub
コメント
[…] 一番シンプルでわかりやすいと思ったのが、EXCEL VBA研究所さんのソースコードです。 […]