Страницы: 1
RSS
Поиск нескольких переменных.
 
Вопрос вот в чем. Стандартный поиск (ctrl+F) позволяет искать одну переменную на одном листе. Можно ли как-то искать несколько переменных сразу (до полусотни) на нескольких листах или в нескольких файлах Excel?  
 
В одной таблице может быть до 1500 строк. Поиск будет выполняться по данным в столбце F (телефонный номер). Искомых переменных может быть до 50. Было бы прекрасно, если б можно было копипастить данные в окно поиска.  
 
Пример, естественно с измененными данными, прилагаю.
 
Стандартный поиск позволяет искать не только по листу, но и по книге.  
Каким образом Вы собираетесь ввести 50 "переменных" для поиска?  
Допустим, что данные нашлись на 2-ом и 3-ем листах - что дальше?
 
Что то я не понял, в столбце F номер телефона, о каких 50 искомых переменных вы говорите? Могу предположить, что вам за раз необходимо найти большое количество телефонных номеров и вывести по ним данные. Тут вам необходимо таблица иСходных данных и формулой ВПР или прочими формулами Отыскать нужные вам данные и все это сделать на втором листе.  
 
Вот так например?
 
Николай, а как быть с этим?  
{quote}{login=Диана-Артемис}{date=21.05.2012 01:44}{thema=Поиск нескольких переменных.}{post}искать несколько переменных сразу (до полусотни) на нескольких листах или в нескольких файлах Excel?{/post}{/quote}
 
Ну тогда макросовского строчить надо,  
Задача не сложная, массив искомых значений, Файлы с данными в одной папке, перебор всех файлов и листов, вывод результатов на лист
 
Дано - штук тридцать файлов Excel, в которых нужно (в каждом отдельно) проверить наличие номеров из списка. В списе одновременно до 50 номеров(если слово "переменная" не нравится).    
Найти - проблема в том, что приходится вводить каждый номер в отдельности и повторять процедуру для всех файлов. Если номера будут найдены, с ними никаких манипуляций проводить не требуется.
 
Ой, в 14.51 это я была. Почему-то не залогилось...
 
{quote}{login=}{date=21.05.2012 02:51}{thema=Поиск нескольких переменных.}{post}... Если номера будут найдены, с ними никаких манипуляций проводить не требуется.{/post}{/quote}Нашли и забыли? пошли следующий искать?
 
А что делать если были найдены совпадения?  
Скопировать данные, написать сообщение,удалить строку с данными, форматнуть диск C, или что то другое?
 
Михаил С.  
 
Данные меняются ежемесячно. Моя задача не допустиь повтора. Т.е. если я нашла номер в файле за январь, я просто не ввожу его в файл за февраль. И т.д.
 
Диана, не побоюсь этого слова - Артемис, а зачем тогда искать, если ничего делать не нужно? Смысл поиска каков?
 
Как вариант - пример кода по теме:  
 
========  
код, осуществляющий поиск указанного текста во всех листах  
 
Option Explicit  
 
Sub tt()  
Dim sh As Worksheet  
Dim iCell As Range  
Dim iSearchText$, iAddress$  
iSearchText$ = "qwer"  
 
For Each sh In Worksheets  
Set iCell = sh.UsedRange.Find _  
(What:=iSearchText$, LookIn:=xlValues, LookAt:=xlWhole)  
 
If Not iCell Is Nothing Then  
iAddress$ = iCell.Address  
Do  
Set iCell = sh.UsedRange.FindNext(After:=iCell)  
MsgBox sh.Name & "!" & iCell.Address  
Loop While Not iCell Is Nothing And iCell.Address <> iAddress$  
End If  
Next  
 
End Sub  
======  
 
Сюда навесить перебор файлов снаружи и перебор номеров внутри.  
Ну а вывод sh.Name & "!" & iCell.Address нарастить именем файла и направить куда-нибудь в массив или сразу в новую книгу.
 
Я уже написала. Смысл поиска - не допустить повтора номеров в последующих файлах. Список искомых номеров выдает программа, у нее неотключаемая функция - захватывать в отчете последние числа предыдущего месяца. Корень зла, собствено. Т.е. у меня имеется ексель файл за апрель, и его номера я прогоняю через файлы за все предыдущие месяца. Не знаю как точнее сформулировать.
 
Hugo. Спасибо!  
 
Скажите, пожалуйста, куда вводить искомые номера? Поиск будет осуществляться в одном листе.
 
{quote}{login=Диана-Артемис}{date=21.05.2012 03:07}{thema=}{post}Я уже написала. {/post}{/quote}Не написали. Переформулирую СВОЙ вопрос: что делать с найденными номерами? Ведь можно выгрузить их на лист, как сделал Николай, можно после каждого найденного выводить сообщение - "Такой номер найден"...
 
Если вам терпит я вечером напишу с перебором файлов, сейчас просто времени на это нет.
 
Диана-Артемис вы поймите, если мы переберем все книги и листы и не зафиксируем совпадения, то мы никогда о них не узнаем. В каком виде вы хотите, чтобы данные были зафиксированы. Думаю все таки в вашем случае было бы удобно выделять номера в исходном файле красным цветом, хочу услышать ваше мнение!!!
 
Юрий М, как будет проще. Наверное, выгрузить все найденные в отдельный лист или книгу.  
 
Николай, терпит. В принципе до следующего месяца даже.
 
Тогда запакуйте в архив два файла за предыдущий месяц и исходный файл который нужно проверить, не требую оригиналов, но главное. что бы на правду были похожи
 
Вот файлы для примера. Номера из файла "искомые", нужно найти в файле "прошлый месяц". Все совпадения либо выделить в файле "искомые" (что, наверное, трудно), либо скопировать в новую книгу или лист.
 
Вставьте в модуль файла с телефонами код и запустите при активном листе с телефонами в E (кстати, в любом файле):  
 
 
Option Explicit  
 
 
 
Sub tt()  
   Dim sh As Worksheet  
   Dim iCell As Range  
   Dim iSearchText$, iAddress$  
   Dim a, i&, af, f, wb As Workbook, s$  
   a = Range([E1], Range("E" & Rows.Count).End(xlUp)).Value
   ReDim b(1 To UBound(a), 1 To 1)  
 
   With Application.FileDialog(1)  
       .AllowMultiSelect = True  
       .InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls"  
       .Title = "Выбрать файлы для анализа"  
       If .Show = False Then Exit Sub  
       Set af = .SelectedItems  
   End With  
 
   For Each f In af  
       Set wb = GetObject(f)  
       For i = 1 To UBound(a)  
           iSearchText$ = a(i, 1)  
           s = ""  
           For Each sh In wb.Worksheets  
               Set iCell = sh.UsedRange.Find _  
                           (What:=iSearchText$, LookIn:=xlValues, LookAt:=xlWhole)  
 
               If Not iCell Is Nothing Then  
                   iAddress$ = iCell.Address  
                   Do  
                       Set iCell = sh.UsedRange.FindNext(After:=iCell)  
                       s = s & wb.Name & " - " & sh.Name & " - " & iCell.Address & "|"  
                   Loop While Not iCell Is Nothing And iCell.Address <> iAddress$  
               End If  
           Next  
           If Len(s) Then b(i, 1) = Left(s, Len(s) - 1)  
 
       Next  
       wb.Close 0  
   Next  
   [f1].Resize(UBound(b), 1) = b
End Sub  
 
 
Информация будет рядом с телефонами. Если файлов/листов для поиска много, то моет быть нужно вывод переделать.  
Но в Вашем примере совпадений нет - мне пришлось один номер закопипастить по листам для теста! :)
 
Hugo, спасибо. А можно поподробнее объяснить (на примере моих файлов) куда какие строки вставлять и как запускать поиск? Я ничего не смыслю в макросах.
Страницы: 1
Читают тему
Наверх