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に適用されます。