Поиск по многим книгам

У Амита есть папка, содержащая сотни книг 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 ‘Изменить по желанию «c: MyFolder» strSearch = «Определенный текст» Установить wOut = Worksheets.Add lRow = 1 с помощью wOut .Cells (lRow, 1) = «Workbook» .Cells (lRow, 2) = «Worksheet» .Cells (lRow, 3) = «Ячейка» .Cells (lRow, 4) = «Текст в ячейке» Установить fso = CreateObject («Scripting.FileSystemObject») Установить fld = fso.GetFolder (strPath) strFile = Dir (strPath & » *. Xls * «) Выполнить Пока strFile » «Установить wbk = Workbooks.Open _ (Имя файла: = strPath &» «& strFile, _ UpdateLinks: = 0, _ ReadOnly: = True, _ AddToMRU: = False) Для каждой недели s В wbk.Worksheets Установить rFound = wks.UsedRange.Find (strSearch) Если нет 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) Цикл пока strFirstAddress rFound.Address Next wbk.Close (False) strFile = Dir Loop .Columns («A: D»). CompleteColumn.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 SubErrHandler: MsgBox Err.Description, vbExclamation Resume ExitHandlerEnd Sub

Чтобы настроить процедуру в соответствии с вашими потребностями, измените strPath переменная, чтобы отразить путь к папке, которую вы хотите обработать, и измените strSearch, чтобы отразить текст, который вы ищете. Макрос создает новый рабочий лист и помещает «совпадения» в каждую строку. Столбец A содержит имя книги, столбец B – имя рабочего листа, столбец C – адрес ячейки, а столбец D – содержимое этой ячейки.

Очевидно, что любой макрос, подобный этому, занимает довольно много времени бежать. Вы можете несколько сократить время, уменьшив количество файлов, которые необходимо искать. Лучший способ сделать это – использовать подход Windows Search (описанный в начале этого совета) для определения книг, в которых находится нужный текст. Переместите эти книги в отдельную папку, а затем выполните поиск макросов в этой папке.

Источник: frestage.ru

Бытовой вопрос