VBAで、指定フォルダ内にある全てのサブフォルダを一覧表示するコード例。何かの処理目的で「フォルダ情報だけ一覧にしたい」「全てのフォルダを対象に処理をしたい」といったケースで、再帰プロシージャの基本サンプルです。
事例の前提
Excelファイル内に「フォルダ一覧」というシートがあり、シートのデータを全て削除後、リストを作成する。
VBAサンプル
Option Explicit Dim fs As Object 'FileSystemObjectのオブジェクト変数を宣言' Dim 対象フォルダ As String Dim サブフォルダ As Object Dim 出力シート As Worksheet Dim 行 As Long Sub 全てのサブフォルダ一覧の作成() '初期設定' Set 出力シート = Sheets("フォルダ一覧") 行 = 1 出力シート.Cells.Delete Shift:=xlUp '対象フォルダの設定' With Application.FileDialog(msoFileDialogFolderPicker) .Title = "一覧にしたいフォルダが存在するフォルダを選択してください。" If .Show <> -1 Then Exit Sub 対象フォルダ = .SelectedItems(1) End With 'FileSystemObjectの利用準備' Set fs = CreateObject("Scripting.FileSystemObject") Call 全てのサブフォルダの一覧化(fs.GetFolder(対象フォルダ)) '終了処理' MsgBox "完了しました。" End Sub Function 全てのサブフォルダの一覧化(ByRef フォルダ As Object) For Each サブフォルダ In フォルダ.SubFolders 出力シート.Cells(行, 1).Value = サブフォルダ.Name 出力シート.Cells(行, 2).Value = サブフォルダ.Path 行 = 行 + 1 Call 全てのサブフォルダの一覧化(サブフォルダ)'再帰処理' Next サブフォルダ End Function
事例の補足説明
細かな点の備忘録として、上記の再帰処理の箇所は、 Call を省略するとエラーになる。括弧なしであればCall を省略可。
以上、VBAで、指定フォルダ内にある全てのサブフォルダを一覧表示するコード例でした。