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 по тематическим разделам со ссылками на все статьи.

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

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

    2. Добрый день. Подскажите пожалуйста, как решить задачу.
      Лист 1 — колонка А — номер производителя (8 цифр)
      Лист 1 — колонка В — серийный номер (4 цифры)
      Лист 2 — колонка А — наименование товара и серийный номер (текст номер текст)
      Лист 2 — колонка В — номер производителя (8 цифр)
      Лист 2 — колонка С — наименование производителя (текст)
      Задача: лист 1 — колонка С значение
      Поиск должен быть осуществлён по двум критериям лист 1 А&В и в колонку С вставить наименование производителя

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

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.