У Амита есть папка, в которой хранятся сотни книг 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), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (5598) относится к Microsoft Excel 97, 2000, 2002 и 2003.