多くのワークブックを検索する(Microsoft Excel)
Amitには、何百ものExcelワークブックを含むフォルダーがあります。彼はすべてのワークブックで特定のテキストを検索する必要があり、すべてのワークブックを検索して、目的のテキストを含むワークブックの名前と、そのテキストを含むワークブックのセルを特定する方法があるかどうか疑問に思います。
目的のテキストが含まれているワークブックを見つけるのは比較的簡単です。 Windowsの検索機能を使用して、目的のテキストを含むファイルを1つのフォルダーで検索するだけです。セルの場所はわかりませんが、ファイルのリストが表示されます。
もちろん、マクロを使用して検索を行うこともできます。 (マクロを使用して、手動で実行する必要のある長くて退屈な作業を実行することをお勧めします。)以下では、フォルダー内のすべてのブックをステップ実行して、探したいものを検索します。 xls *で終わるすべてのファイルを開きます(末尾のアスタリスクは、xls、xlsx、およびxlsmファイルを検索することを意味します)。
Sub SearchFolders() Dim fso As Object Dim fld As Object Dim strSearch As String Dim strPath As String Dim strFile As String Dim wOut As Worksheet Dim wbk As Workbook Dim wks As Worksheet Dim lRow As Long Dim rFound As Range Dim strFirstAddress As String On Error GoTo ErrHandler Application.ScreenUpdating = False 'Change as desired strPath = "c:\MyFolder" strSearch = "Specific text" Set wOut = Worksheets.Add lRow = 1 With wOut .Cells(lRow, 1) = "Workbook" .Cells(lRow, 2) = "Worksheet" .Cells(lRow, 3) = "Cell" .Cells(lRow, 4) = "Text in Cell" Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(strPath) strFile = Dir(strPath & "\.xls") Do While strFile <> "" Set wbk = Workbooks.Open _ (Filename:=strPath & "\" & strFile, _ UpdateLinks:=0, _ ReadOnly:=True, _ AddToMRU:=False) For Each wks In wbk.Worksheets Set rFound = wks.UsedRange.Find(strSearch) If Not rFound Is Nothing Then strFirstAddress = rFound.Address End If Do If rFound Is Nothing Then Exit Do Else lRow = lRow + 1 .Cells(lRow, 1) = wbk.Name .Cells(lRow, 2) = wks.Name .Cells(lRow, 3) = rFound.Address .Cells(lRow, 4) = rFound.Value End If Set rFound = wks.Cells.FindNext(After:=rFound) Loop While strFirstAddress <> rFound.Address Next wbk.Close (False) strFile = Dir Loop .Columns("A:D").EntireColumn.AutoFit End With MsgBox "Done" ExitHandler: Set wOut = Nothing Set wks = Nothing Set wbk = Nothing Set fld = Nothing Set fso = Nothing Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description, vbExclamation Resume ExitHandler End Sub
必要に応じてルーチンをカスタマイズするには、処理するフォルダーへのパスを反映するようにstrPath変数を変更し、検索対象のテキストを反映するようにstrSearchを変更します。マクロは新しいワークシートを作成し、各行に「ヒット」を配置します。列Aにはワークブック名、列Bにはワークシート名、列Cにはセルアドレス、列Dにはそのセルの内容が含まれています。
明らかに、このようなマクロは実行にかなりの時間がかかります。検索する必要のあるファイルの数を減らすことで、時間をいくらか短縮できます。これを行う最良の方法は、Windows Searchアプローチ(このヒントの冒頭で説明)を使用して、目的のテキストが存在するブックを特定することです。それらのブックを独自のフォルダーに移動してから、そのフォルダーでマクロ検索を実行します。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(5598)は、Microsoft Excel 97、2000、2002、および2003に適用されます。