VBA Excel. Метод FindNext объекта Range

Метод Range.FindNext предназначен в VBA Excel для продолжения поиска ячеек в диапазоне по заданному условию, начатого методом Find. Пример использования.

Метод Range.FindNext

Описание

Метод Range.Find находит первую ячейку в заданном диапазоне по точному или частичному совпадению условия поиска с ее значением, формулой или примечанием. На этом работа метода Find заканчивается. При новом запуске он найдет ту же ячейку.

Что делать, если в диапазоне есть еще ячейки, соответствующие условию поиска, и их тоже необходимо найти?

Для этих целей предназначен метод Range.FindNext. Он продолжает в диапазоне поиск следующей ячейки, соответствующей условию, заданному в предыдущей строке с методом Find. Для того, чтобы найти все такие ячейки, метод FindNext повторяется с помощью одного из циклов VBA Excel.

Синтаксис

  • Expression – выражение (переменная), возвращающее объект Range, в котором осуществляется поиск.
  • After – необязательный аргумент, представляющий из себя единственную ячейку диапазона, после которой начнется поиск. Если аргумент не указан, поиск начнется после левой верхней ячейки диапазона. В обоих случаях, ячейка по умолчанию (левая верхняя) или ячейка, заданная параметром After, в поиске не участвует.

Пример использования

Условие

В таблице с названиями басен необходимо выбрать басни, в названия которых входит слово Лев:

Таблица с названиями басен

Решение

Результат

Результат поиска названий басен со словом Лев

Расшифровка

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.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

1 комментарий для “VBA Excel. Метод FindNext объекта Range”

  1. Добрый день!
    А можете подсказать решение такой задачи – у нас есть 2 рабочих листа: лист1 – данные в разброс; лист2 – условия поиска, которые прописаны в один столбец начиная с ячейки A1.
    Необходимо циклом осуществить поиск на лист1 все значения с лист2 и отформатировать все значения, которые будут соответствовать условиям с лист2

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег <pre> и по окончании кода </pre>.