'
' 外部宣言 - 厳格な変数宣言を強制
Option Explicit
' ShowFolderTreeサブルーチンの定義開始
Sub ShowFolderTree()
' 変数の宣言
Dim fs As Object, folder As Object, subfolder As Object
Dim path As String, row As Integer
' ファイルダイアログを使用してユーザーにフォルダを選択させる
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください" ' ダイアログのタイトル設定
.AllowMultiSelect = False ' 複数選択を不可に設定
If .Show <> -1 Then Exit Sub ' ダイアログがキャンセルされた場合、サブルーチンを終了
path = .SelectedItems(1) ' 選択されたフォルダのパスを取得
End With
' ファイルシステムオブジェクトを作成し、選択されたフォルダを取得
Set fs = CreateObject("Scripting.FileSystemObject")
Set folder = fs.GetFolder(path)
row = 1 ' シートの開始行を設定
' ListFoldersを呼び出し、フォルダとファイルのツリーを表示
ListFolders folder, row, ""
' 列幅を自動調整
Columns("A:A").AutoFit
End Sub
' ListFoldersプライベートサブルーチンの定義開始
Private Sub ListFolders(ByVal folder As Object, ByRef row As Integer, ByVal indent As String)
Dim subfolder As Object, file As Object ' 変数宣言
Dim ws As Worksheet ' ワークシート変数の宣言
Set ws = ThisWorkbook.Sheets(1) ' ワークシート1を設定
' フォルダ名をインデント付きで表示
ws.Cells(row, 1).Value = indent & "【" & folder.Name & "】"
row = row + 1 ' 行番号を+1加算
' サブフォルダを再帰的に処理
For Each subfolder In folder.SubFolders
ListFolders subfolder, row, indent & " " ' インデントを追加して呼び出し
Next subfolder
' フォルダ内の全ファイルを表示
For Each file In folder.Files
ws.Cells(row, 1).Value = indent & " *" & file.Name
row = row + 1 ' 行番号を+1加算
Next file
End Sub
'
'