搜索许多工作簿(Microsoft Excel)
Amit的文件夹包含数百个Excel工作簿。他需要在所有工作簿中搜索一些特定的文本,并想知道是否存在一种方法可以搜索所有工作簿并确定包含所需文本的工作簿的名称以及包含该文本的工作簿中的单元格。
查找哪些工作簿包含所需的文本相对容易。您所需要做的就是使用Windows的“搜索”功能在单个文件夹中查找包含所需文本的文件。虽然它不会告诉您单元格的位置,但它将在文件列表中向下滚动。
当然,您可以使用宏进行搜索。 (使用宏来完成冗长而繁琐的工作,否则通常要手动完成,这始终是一个好主意。)以下内容将逐步浏览文件夹中的所有工作簿,并搜索要查找的内容。它将打开任何以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_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(5598)适用于Microsoft Excel 97、2000、2002和2003。