Метод Range.FindNext предназначен в VBA Excel для продолжения поиска ячеек в диапазоне по заданному условию, начатого методом Find. Пример использования.
Метод Range.FindNext
Описание
Метод Range.Find находит первую ячейку в заданном диапазоне по точному или частичному совпадению условия поиска с ее значением, формулой или примечанием. На этом работа метода Find
заканчивается. При новом запуске он найдет ту же ячейку.
Что делать, если в диапазоне есть еще ячейки, соответствующие условию поиска, и их тоже необходимо найти?
Для этих целей предназначен метод Range.FindNext
. Он продолжает в диапазоне поиск следующей ячейки, соответствующей условию, заданному в предыдущей строке с методом Find
. Для того, чтобы найти все такие ячейки, метод FindNext
повторяется с помощью одного из циклов VBA Excel.
Синтаксис
1 |
Expression.FindNext (After) |
- Expression – выражение (переменная), возвращающее объект Range, в котором осуществляется поиск.
- After – необязательный аргумент, представляющий из себя единственную ячейку диапазона, после которой начнется поиск. Если аргумент не указан, поиск начнется после левой верхней ячейки диапазона. В обоих случаях, ячейка по умолчанию (левая верхняя) или ячейка, заданная параметром After, в поиске не участвует.
Пример использования
Условие
В таблице с названиями басен необходимо выбрать басни, в названия которых входит слово Лев:
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Primer() Dim myCell As Range, adr As String, str As String With Range("A1:C9") Set myCell = .Find("Л?в", MatchCase:=1) If Not myCell Is Nothing Then str = myCell.Value adr = myCell.Address Else MsgBox "Ничего не найдено" Exit Sub End If Do Set myCell = .FindNext(myCell) If Not myCell.Address = adr Then str = str & vbNewLine & myCell.Value End If Loop Until myCell.Address = adr End With MsgBox str End Sub |
Результат
Расшифровка
1. Объявляем переменные:
Dim myCell As Range, adr As String, str As String
- myCell – объектная переменная, которой присваивается ссылка на ячейку, найденную методами
Find
иFindNext
; - adr – адрес первой найденной ячейки, который нужен для остановки цикла после однократного прохождения по ячейкам указанного диапазона;
- str – в эту переменную записывается содержимое найденных ячеек.
2. Ищем первую ячейку со словом Лев в диапазоне Range("A1:C9")
и присваиваем ссылку на нее переменной myCell
:
Set myCell = .Find("Л?в", MatchCase:=1)
В искомой строке («Л?в») используем подстановочный знак (?), который заменяет любую букву, чтобы найти слова с корнями «Лев» и «Льв».
Так как животные в названиях басен пишутся с заглавной буквы, в искомой строке тоже используем заглавную букву и поиск с учетом регистра (MatchCase:=1
), чтобы не были найдены ячейки со словами «плов«, «клавиатура» и т.д. Хотя ячейки со словами «Левша», «Лавка» и подобные, начинающиеся с большой буквы, будут найдены.
3. Если переменная myCell
не содержит Nothing
, значит первая ячейка с искомой строкой найдена. Присваиваем ее значение переменной str
, а ее адрес – переменной adr
.
Если переменная myCell
содержит Nothing
, выводим сообщение «Ничего не найдено» и завершаем процедуру (Exit Sub
).
4. С помощью цикла Do...Loop Until...
и метода FindNext
находим в диапазоне все остальные ячейки, соответствующие критерию поиска, заданному в строке с методом Find
. Добавляем содержимое найденных ячеек в переменную str
.
Переменная myCell
используется повторно в течение всей работы цикла: Set myCell = .FindNext(myCell)
.
Цикл и добавление значений в переменную str
завершаются при возврате в первоначально найденную ячейку, адрес которой мы записали (используем условие myCell.Address = adr
).
5. По окончании работы цикла выводим содержимое переменной str
в информационном окне MsgBox.
Добрый день!
А можете подсказать решение такой задачи — у нас есть 2 рабочих листа: лист1 — данные в разброс; лист2 — условия поиска, которые прописаны в один столбец начиная с ячейки A1.
Необходимо циклом осуществить поиск на лист1 все значения с лист2 и отформатировать все значения, которые будут соответствовать условиям с лист2
Очень верю, что ваши примеры пригодятся
Добрый день. Подскажите пожалуйста, как решить задачу.
Лист 1 — колонка А — номер производителя (8 цифр)
Лист 1 — колонка В — серийный номер (4 цифры)
Лист 2 — колонка А — наименование товара и серийный номер (текст номер текст)
Лист 2 — колонка В — номер производителя (8 цифр)
Лист 2 — колонка С — наименование производителя (текст)
Задача: лист 1 — колонка С значение
Поиск должен быть осуществлён по двум критериям лист 1 А&В и в колонку С вставить наименование производителя
Обсуждение закрыто.