再帰呼び出しを行いサブフォルダからもファイルを検索し、一覧を作成します。 検索にはフォルダやファイルなどを操作できるFileSystemObjectオブジェクトを使います。
実行画面
FileSystemObjectを使うには、VBE画面の参照設定で「Microsoft Scrpting Runtime」のチェックをONにしてください。
フォルダ内のファイル検索を実行した結果です。指定したセルから一覧が作成されました。B列にはフォルダ名、C列にはファイル名が表示されます。
VBAコード
下記のVBAコードを追加してください。FileSystemObjectオブジェクトを使い再帰的にファイル検索を行います。
Private lFileCount As Long
'フォルダ内ファイル検索
Sub ExFolderSearch(sSearchPath As String, lStartRow As Long, lStartCol As Long)
Dim tFso As FileSystemObject
lFileCount = 0
Set tFso = New FileSystemObject
Call ExFolderSearchSub(tFso.GetFolder(sSearchPath), lStartRow - 1, lStartCol)
Set tFso = Nothing
End Sub
Private Sub ExFolderSearchSub(ByVal tPath As Folder, ByRef lRow As Long, ByVal lCol As Long)
Dim tInPath As Folder
Dim tFile As File
'サブフォルダ内の探索
For Each tInPath In tPath.SubFolders
Call ExFolderSearchSub(tInPath, lRow, lCol)
Next tInPath
'フォルダ内のファイルを表示
For Each tFile In tPath.Files
lRow = lRow + 1
lFileCount = lFileCount + 1
Cells(lRow, lCol) = tPath.Path & "\"
Cells(lRow, lCol + 1) = tFile.Name
Next tFile
Set tPath = Nothing
End Sub
下記のVBAコードに変更してください。 [検索フォルダ]コマンドボタンのクリックイベントです。
Private Sub CommandButton1_Click()
Dim sDir As String
'フォルダー選択ダイアログ
sDir = SelectFolder_FileDialog
If sDir <> "" Then
Range("D3") = sDir
ExFolderSearch sDir, 6, 2
End If
End Sub