下図のような階層の深さがまちまちな、フォルダーの一覧を作りたいというシーンに出くわしました。
こういうときは再帰処理です。
再帰処理でフォルダー一覧を作成するサンプルマクロ
再帰呼び出しを行ってフォルダー一覧を作成する、FileSystemObjectを利用したExcelマクロを、ご紹介しておきます。
Private PATH_ As String ' 一覧を作成するルートフォルダーのフルパス
Public Sub ListFolders()
Dim fso As Scripting.FileSystemObject
Dim n As Long ' 書き出しを行う行番号
n = 1
PATH_ = Cells(n, "A").Value
n = n + 1
Set fso = New FileSystemObject
On Error GoTo ErrHndl
listSubFolders fso.GetFolder(PATH_), n
ExitSub:
Set fso = Nothing
Exit Sub
ErrHndl:
MsgBox Err.Description
Err.Clear
GoTo ExitSub
End Sub
Private Sub listSubFolders(ByVal folder_ As Scripting.Folder, ByRef n As Long)
Dim fol As Scripting.Folder
For Each fol In folder_.SubFolders
Cells(n, "A").Value = Replace(fol.Path, PATH_, "")
n = n + 1
listSubFolders fol, n
Next
Set fol = Nothing
End Sub
サンプルマクロの使い方
事前にMicrosoft Scripting Runtimeへの参照設定を行っておいてください。
アクティブシートのA1セルに、フォルダー一覧を作成したいフルパスを入力しておいてから、上記のSubプロシージャ・ListFoldersを実行すると、A2セル以下に下図のようなフォルダー一覧が作成されます。
Home » FSO・FileSystemObjectの使い方 » 再帰処理でフォルダー一覧を作成するExcelマクロ