RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

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