Страницы: 1 2 След.
RSS
как сделать поиск по всем листам книги?
 
Как сделать так, чтобы по заданному в поисковике значению находились все результаты на всех листах. Приложенный файлик содержит макрос, который выводит результат поиска только первого значения листа и так со всей книги. Например, ищет цифру 5. Но если на листе таких цифр 5 примерно штук 10, то поисковик выведет только первую найденную цифру 5 этого листа. Как сделать так, чтобы выводились и остальные значения данной страницы, соответствующие заданному значению для поиска? То есть как сделать так, чтобы остальные девять цифр 5 тоже выводились в результатах поиска?
 
Вариант.
 
EducatedFool выкладывал надстройку.
Я сам - дурнее всякого примера! ...
 
{quote}{login=Юрий М}{date=25.07.2011 11:02}{thema=}{post}Вариант.{/post}{/quote}  
 
Я уж думал вы меня забаните =)  
Ваш вариант тоже прикольный. Но встает вопрос тогда убрать либо ячейки текст для поиска и желтую ячейку с цифрой 5 совсем, поскольку она грубо говоря дублирует вашу кнопку. И вывод должен быть в одну ячейку в виде текста как в моем файлике =)  
либо реализовано как я хотел, то есть сохранить мой файлик, но с вашей реализацией всех результатов со всего листа =)
 
{quote}{login=KukLP}{date=25.07.2011 11:05}{thema=}{post}EducatedFool выкладывал надстройку.{/post}{/quote}  
спасибо за предложение, но надстройку не надо =) мне два варианта верхних нравятся
 
А кто Вам мешает "убрать" эту жёлтую ячейку? Она в моём макросе не задействована. Значение для поиска выбирается по запросу - Вы не заметили? :-) Кнопку очистки тоже можете удалить - диапазон будет очищаться автоматически.
 
в данный момент у меня код модуля вот такой  
 
Option Explicit  
 
Sub Поиск()  
Dim iFoundRng As Range  
Dim iSheet As Worksheet  
Dim iFoundSht As Worksheet  
Dim FirstAddress As String  
Dim TextToFind As Variant  
Dim iLastRow As Long  
Dim iShtName As String  
     
   Set iFoundSht = Sheets("Поиск") 'лист "Поиск" присваиваем переменной  
   iFoundSht.Range("A5:AA5000").Clear 'очищаем диапазон ячеек на листе Поиск  
   'TextToFind = Application.InputBox("Введите строку для поиска" & Chr(13) & Chr(13) & "Например: Lexus или Lexus 350", "Поиск", "Lexus 350")  
   TextToFind = iFoundSht.Range("B2")  
   If TextToFind = "" Or TextToFind = False Then Exit Sub 'если ничего не ввели - Выход!  
   TextToFind = Trim(TextToFind) 'убираем начальные и конечные пробелы  
   Application.ScreenUpdating = False 'отключаем обновление экрана  
   For Each iSheet In ThisWorkbook.Worksheets 'поиск по листам  
       If iSheet.Name <> iFoundSht.Name Then  
           If iSheet.FilterMode = True Then iSheet.ShowAllData 'если на листе установлен автофильтр, то снимаем его  
           Set iFoundRng = iSheet.Cells.Find(TextToFind, , xlFormulas, xlPart)  
           If Not iFoundRng Is Nothing Then 'если нашли  
               FirstAddress = iFoundRng.Address 'запоминаем адрес найденной ячейки, чтобы продолжить поиск по листу  
               Do  
                   With iFoundSht  
                       iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'определяем последнюю заполненную строку на листе поиск  
                       If iLastRow = 1 Then iLastRow = 4 'если лист пуст, то вставлять будем начиная с 7-й строки  
                       If iShtName <> iSheet.Name Then 'если новый прайс-лист  
                           With .Cells(iLastRow + 1, 1) 'проставляем имя листа  
                               .Value = "Лист: " & iSheet.Name & " Ячейка: " & iFoundRng.Address(0, 0)  
                               'добавляем гиперссылку  
                               iFoundSht.Hyperlinks.Add Anchor:=iFoundSht.Cells(iLastRow + 1, 1), Address:="", _  
                                   SubAddress:="'" & iSheet.Name & "'" & "!" & iFoundRng.Address, ScreenTip:="Перейти на лист " & iSheet.Name  
                               '.Font.Bold = True 'выделяем жирным  
                           End With  
                       End If  
                       'iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1) 'копируем всю строку  
                       iShtName = iSheet.Name 'запоминаем имя листа  
                   End With  
                   Set iFoundRng = iSheet.Cells.FindNext(iFoundRng) 'продолжаем поиск на том же листе  
               Loop While iFoundRng.Address <> FirstAddress  
           End If  
       End If  
   Next iSheet  
   Application.ScreenUpdating = True 'включаем обновление экрана  
   MsgBox "Поиск завершён!", 64, "Поиск"  
End Sub  
 
Sub Finder()  
Dim iRng As Range, TextForFind As String, FirstAddress As String, n As Integer, iLastRow As Long  
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
Range(Cells(5, 1), Cells(iLastRow + 1, 2)).Clear  
iLastRow = 4  
   TextForFind = InputBox("Введите искомое слово (значение)", " Запрос для поиска")  
   If TextForFind = "" Then  
       MsgBox "Вы ничего не указали", 48, "Вы чё, в натуре?"  
       Exit Sub  
   End If  
 
   For n = 2 To Sheets.Count  
       With Sheets(n).UsedRange  
           Set iRng = .Find(What:=TextForFind, LookIn:=xlFormulas, LookAt:=xlPart)  
           If Not iRng Is Nothing Then  
               FirstAddress = iRng.Address  
               Do  
                   Cells(iLastRow + 1, 1) = Sheets(n).Name  
                   Cells(iLastRow + 1, 2) = iRng.Address(0, 0)  
                   iLastRow = iLastRow + 1  
                   Set iRng = .FindNext(iRng)  
               Loop While iRng.Address <> FirstAddress  
           Else  
               MsgBox "Значение " & TextForFind & " не найдено!", 48, "Ошибка"  
           End If  
       End With  
   Next  
End Sub  
 
по вашим словам я могу оставить только последнюю часть данного кода?
 
"Убрал" жёлтую ячейку, удалил кнопку, данные выводятся в одну ячейку.
 
спасибо большое! =) я немного подправил ваш макрос под свой шаблон, чтобы вместо адреса ячейки выводилось содержимое самой ячейки =)
 
а как сделать, чтобы результаты поиска выводились в одной ячейке, а не в двух?
 
Какой смысл выводить значение, если Вы ИМЕННОГО его задали в поиске? :-) Впрочем, Вам виднее...
 
{quote}{login=Medvedoc}{date=25.07.2011 11:23}{thema=}{post}а как сделать, чтобы результаты поиска выводились в одной ячейке, а не в двух?{/post}{/quote}Вы мой последний файл открывали?
 
конечно открывал =) мне понравился.    
Я имел в виду, что у вас текст найдено располагается в столбце А, а текст ячейка в столбце В. Вот я и говорю что результат поиска выводится в двух ячейках. А как сделать так, чтобы он был только в одной ячейке? Например в ячейке G?
 
Вы про какой файл говорите? Ща точно забаню!
 
ВАМ БЫ ЛИШЬ ЗАБАНИТЬ =) у меня просто уже голова от этих макросов едет. Извините, не внимательно смотрел. Сейчас увидел. Спасибо вам огромное за помощь! =)  
 
Скажите пожалуйста с чего лучше начать изучать создание макросов?
 
Литература (можно найти в "Копилке") и Форум/Форумы.
 
{quote}{login=Юрий М}{date=25.07.2011 11:02}{thema=}{post}Вариант.{/post}{/quote}  
Добрый день  
результат можно сделать в виде ссылок на ячейки?  
 
Интересует вывод всех совпадающих значений на листе
 
А разве не все выводятся?
 
А да выводятся все  
 
Можно сделать чтобы выводились например полностью значения (а не ссылки на ячейки)  
 
Например надо найти цифру 5  
Результат с ссылками (например)  
5  
51  
156  
567
 
Это ведь совсем другая задача (а то я уже сделал и формирование гиперссылок). Уточните проблему, чтобы не переделывать потом.
 
Прикрепил файл
 
Так?
 
Спасибо так.  
 
А можно без вывода промежуточных результатов (окошек) Найдено  столько -то штук на листе 1 и т.д.
 
У меня не было - сколько найдено. Была информация, если НЕ найдено на листе. Убрал сообщение.
 
Спасибо  
то что искал
 
Здравствуйте! Уважаемые специалисты, вновь прошу вашей помощи.  
В файлике описана проблемма.
Ирина
 
в другом формате
Ирина
 
Формула для плана  
=ИНДЕКС(ДВССЫЛ("'"&C11&"'"&"!$C$7:$C$10");ПОИСКПОЗ(Факт!B11;работы;0))
 
Формула для остатка (массивная, вводить Ctrl+Shift+Enter)  
=E11-СУММ(ЕСЛИ((C11=$C$11:C11);ЕСЛИ((B11=$B$11:B11);$D$11:D11)))
 
Роман, здравствуйте! Ваша формула для плана работает замечательно, спасибо, все у меня получилось, а вот в формуле по остатку заложены два условия, выбор по адресу и выбор по названию работы, если одно из них совпадает, то формула берет значение в сумму, но там нужно сделать так чтобы совпадало одновременно два условия (адрес и работа), а то суммирует все подряд...  
помогите пожалуйста поправить...
Ирина
Страницы: 1 2 След.
Читают тему
Наверх