- ベストアンサー
複数のワークブックから特定の単語を探すマクロを作る
- 複数のワークブックから特定の単語を探すマクロを作成する方法について説明します。
- マクロを使用して、複数のファイルの最下部にあるワークブックから指定した単語を探すことができます。
- 単語を入力したワークブックのファイル名を表示するマクロの作成方法について詳しく解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>複数のファイルの最下部にあるファイル とは、 下階層にフォルダーを持たないフォルダー、 このフォルダーに格納されたファイルたちという意味ですか? それとも このフォルダーに格納されたファイルたちの内、 更新日時が最新のファイルですか? 前者なら こんな感じでいかがでしょうか。 なお、部分一致で検索しています。 また、指定フォルダー以下には エクセルで開くことのできるブックしか無い前提で かつ、複数シートの場合は全てのシートを検索しています。 求めが異なるようなら指摘して下さい。 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
その他の回答 (1)
- kon555
- ベストアンサー率51% (1844/3562)
まず重要な点として「最下部のファイル」は各々のPC(というかフォルダ)のソート設定が変化するため、ファイル検索の目印としては使用できません。 一度検索したファイルは対象外とするなら、一度検索したファイルを記録しておき、ソレを除外して検索するマクロを組むべきでしょうね。 ただ、もし一度検索したファイルであっても、更新等で追加されるというなら対象とすべきですし、作業時間に余裕があるなら、いっそ毎回1から検索したほうがいいかもしれません。 この辺りは貴方の業務環境次第ですので、ご自身で組み立てるしかないと思います。 ひとまず参考になりそうなページを置いておきます。多分この辺りを見ながらやってみれば、それなりの苦労で組めると思いますよ。 http://officetanaka.net/excel/vba/tips/tips36.htm https://www.moug.net/tech/exvba/0050051.html
お礼
ありがとうございます
お礼
ありがとうございます