>複数のファイルの最下部にあるファイル
とは、
下階層にフォルダーを持たないフォルダー、
このフォルダーに格納されたファイルたちという意味ですか?
それとも
このフォルダーに格納されたファイルたちの内、
更新日時が最新のファイルですか?
前者なら
こんな感じでいかがでしょうか。
なお、部分一致で検索しています。
また、指定フォルダー以下には
エクセルで開くことのできるブックしか無い前提で
かつ、複数シートの場合は全てのシートを検索しています。
求めが異なるようなら指摘して下さい。
Option Explicit
Const tgDir = "D:\Test" '検索対象の親フォルダー
Dim PutLine As Long
Dim startCell As Range
'//--------------------
Sub Sample()
Dim maxRow As Long
Dim maxCol As Long
'フルパスの出力開始位置を定義
Set startCell = ThisWorkbook.Sheets(1).Cells(2, 3)
'出力先をクリア
maxRow = startCell.SpecialCells(xlLastCell).Row
maxCol = startCell.SpecialCells(xlLastCell).Column
Range(startCell, Cells(maxRow, maxCol)).ClearContents
PutLine = 0
Call getFileList(tgDir, "ネコ") '検索文字列
End Sub
'//--------------------
Sub getFileList(searchPath As String, KeyWord As String)
Dim FSO As New FileSystemObject
Dim objFiles As File
Dim objFolders As Folder
Dim Folders As Long
Dim tgBook As Workbook
Dim Myrng As Range
Dim WS As Worksheet
'下階層のフォルダーの有無を判定
Folders = 0
For Each objFolders In FSO.GetFolder(searchPath).SubFolders
Folders = Folders + 1
Exit For
Next
'下階層にフォルダーが無かったら
If Folders = 0 Then
For Each objFiles In FSO.GetFolder(searchPath).Files
Set tgBook = Workbooks.Open(objFiles.Path)
For Each WS In tgBook.Worksheets
Set Myrng = WS.Cells.Find(KeyWord)
If Not (Myrng Is Nothing) Then
'MsgBox Myrng.Address
startCell.Offset(PutLine, 0).Value = objFiles.Path
PutLine = PutLine + 1
Exit For
End If
Next WS
tgBook.Close
Next
End If
'サブフォルダ取得
For Each objFolders In FSO.GetFolder(searchPath).SubFolders
Call getFileList(objFolders.Path, KeyWord)
Next
End Sub
お礼
ありがとうございます