VBA フォルダ内のファイルを再帰的に取得 FileSystemObject
今回やりたいこと
- [フォルダ]
- a.txt
- b.jpg
- [子フォルダ]
- c.html
フォルダの中身がこんな感じだとする。
a や b だけじゃなくて、深い階層にある c のファイルパスも全部取得したい。
そんな関数をつくろう。
関数の仕様
- フォルダに含まれる全ファイルのパスを取得する。
- すべてのフォルダ階層を再帰的に探索する。
- 結果は Collection に入れて返す。
コード
Public Sub テスト実行() Dim cファイルパス As Collection Set cファイルパス = 全ファイルパスを取得("C:\Windows\Web") MsgBox cファイルパス.Count & "個のファイルがあります。" End Sub Public Function 全ファイルパスを取得(sフォルダパス) As Collection Dim c As New Collection 全ファイルパスを再帰的に取得 _ CreateObject("Scripting.FileSystemObject"), c, sフォルダパス Set 全ファイルパスを取得 = c End Function Private Sub 全ファイルパスを再帰的に取得(fso, c As Collection, sフォルダパス) Dim oフォルダ As Object Set oフォルダ = fso.GetFolder(sフォルダパス) Dim oファイル As Object For Each oファイル In oフォルダ.Files c.Add oファイル.Path Next Dim o子フォルダ As Object For Each o子フォルダ In oフォルダ.SubFolders 全ファイルパスを再帰的に取得 fso, c, o子フォルダ.Path Next End Sub