Вот спросил (скопировал что выше написал) - должно сработать, только дописать цикл поиска значений, и вывод на лист:
Код |
---|
Вот макрос на VBA, который открывает все .xlsx файлы в указанном каталоге, выполняет поиск ячеек на активном листе и извлекает данные из соседней ячейки: Sub ProcessXlsxFiles() Dim fso As Object Dim folder As Object Dim file As Object Dim wb As Workbook Dim ws As Worksheet Dim searchValue As String Dim foundCell As Range Dim result As String Dim folderPath As String ' Укажите путь к папке folderPath = "C:\YourFolderPath\" ' Замените на ваш путь ' Создаем объект FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderPath) ' Значение для поиска searchValue = "YourSearchTerm" ' Замените на искомое значение ' Перебираем файлы в папке For Each file In folder.Files If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then ' Открываем файл Set wb = Workbooks.Open(file.Path) Set ws = wb.ActiveSheet ' Поиск всех вхождений Set foundCell = ws.Cells.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole) If Not foundCell Is Nothing Then Dim firstAddress As String firstAddress = foundCell.Address Do ' Получаем значение из соседней ячейки (справа) result = foundCell.Offset(0, 1).Value ' Здесь можно обработать результат, например, вывести или сохранить Debug.Print "Найдено в " & file.Name & ", ячейка " & foundCell.Address & ": " & result ' Ищем следующее вхождение Set foundCell = ws.Cells.FindNext(foundCell) Loop Until foundCell.Address = firstAddress Or foundCell Is Nothing Else Debug.Print "В файле " & file.Name & " значение не найдено" End If ' Закрываем файл без сохранения wb.Close SaveChanges:=False End If Next file ' Освобождаем объекты Set fso = Nothing Set folder = Nothing MsgBox "Обработка завершена!" End Sub </xaiArtifact> **Инструкции:** 1. Замените `folderPath` на путь к вашей папке (например, `"C:\Documents\ExcelFiles\"`). 2. Укажите `searchValue` — значение, которое нужно искать в ячейках. 3. Макрос открывает каждый .xlsx файл, ищет `searchValue` на активном листе, извлекает значение из ячейки справа от найденной и выводит результат в окно Immediate (Ctrl+G в редакторе VBA). 4. Для сохранения результатов вместо `Debug.Print` можно добавить код для записи в файл или лист. **Примечания:** - Убедитесь, что путь к папке заканчивается слешем `\`. - Макрос не сохраняет изменения в файлах. - Если значение не найдено, выводится сообщение об этом. - Для работы с `FileSystemObject` не требуется подключения дополнительных библиотек. |