Vba excel findnext не работает

Обновлено: 06.07.2024

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

Синтаксис

выражения. FindNext (После)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
After Необязательный Variant Ячейка, после которой необходимо искать. Соответствует положению активной ячейки, когда поиск выполняется из пользовательского интерфейса. Следует помнить, что после этого должна быть одна ячейка в диапазоне.

Возвращаемое значение

Примечания

Когда поиск достигает конца указанного диапазона поиска, он возвращается в начало диапазона. Чтобы остановить поиск при этом возврате, сохраните адрес первой найденной ячейки, а затем проверьте адрес каждой последующей найденной ячейки, сравнив его с этим сохраненным адресом.

Пример

В этом примере все ячейки в диапазоне A1:A500 находятся на таблице, содержаной значение 2, и изменяет все значение ячейки на 5. Таким образом, значения 1234 и 99299 содержали 2 и оба значения ячеек станут 5.

В этом примере находятся все ячейки в первых четырех столбцах, содержащих постоянную X, и скрывается столбец, содержащий X.

В этом примере находятся все ячейки в первых четырех столбцах, которые содержат констант X, и снимает столбец, содержащий X.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Метод 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 .

4. С помощью цикла Do. Loop Until. и метода FindNext находим в диапазоне все остальные ячейки, соответствующие критерию поиска, заданному в строке с методом Find . Добавляем содержимое найденных ячеек в переменную str .

Переменная myCell используется повторно в течение всей работы цикла: Set myCell = .FindNext(myCell) .

Цикл и добавление значений в переменную str завершаются при возврате в первоначально найденную ячейку, адрес которой мы записали (используем условие myCell.Address = adr ).

5. По окончании работы цикла выводим содержимое переменной str в информационном окне MsgBox.

Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.

Синтаксис метода Range.Find

Expression . Find ( What , After , LookIn , LookAt , SearchOrder , SearchDirection , MatchCase , MatchByte , SearchFormat )

Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.

В скобках перечислены параметры метода, среди них только What является обязательным.

Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.

Если необходимо найти следующие ячейки, содержащие поисковую фразу, используется метод Range.FindNext.

Параметры метода Range.Find

  • xlValues (-4163) – значения;
  • xlComments (-4144) – примечания*;
  • xlNotes (-4144) – примечания*;
  • [xlFormulas (-4123) – формулы]**.
  • xlWhole (1) – полное совпадение;
  • xlPart (2) – частичное совпадение.
  • xlByRows (1) – поиск по строкам;
  • xlByColumns (2) – поиск по столбцам.
  • xlNext (1) – поиск вперед;
  • xlPrevious (2) – поиск назад.
  • False (0) – поиск без учета регистра (по умолчанию);
  • True (1) – поиск с учетом регистра.
  • False (0) – двухбайтовый символ может соответствовать однобайтовому символу;
  • True (1) – двухбайтовый символ должен соответствовать только двухбайтовому символу.

* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments и MsgBox xlNotes .
** Тесты показали неработоспособность метода Range.Find с константой xlFormulas в моей версии VBA Excel.

В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.

VBA Excel – это отличный инструмент для автоматизации многих офисных и других учетных и вычислительных процессов. В этой рубрике представлены небольшие заметки по VBA Excel со справочной информацией, которые можно использовать как памятки при написании кода. VBA часто применяется для автоматизации офисных и других работ, которые ведутся в книгах Excel. Это и учет сотрудников, и начисление зарплат и налогов, и формирование различных бланков, и обработка больших объемов каких-либо данных. То, чем приходилось мне пользоваться на практике, также описано в этой рубрике и в рубрике «Офисная работа».

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

VBA Excel. Метод Application.Intersect (пересечение диапазонов)

Определение блока ячеек, расположенного на пересечении двух и более диапазонов, с помощью метода Application.Intersect из кода VBA Excel. Пример. Подробнее » VBA Excel. Метод Application.Intersect (пересечение диапазонов)

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

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

VBA Excel. Выбор случайной ячейки

Выбор случайной ячейки из диапазона Excel с помощью кода VBA и присвоение ее значения переменной. Заполнение диапазона ячеек случайными числами. Подробнее » VBA Excel. Выбор случайной ячейки

VBA Excel. Проверка состояния книги (открыта или закрыта)

Открыта или закрыта книга Excel? Проверяем с помощью кода VBA по краткому или полному имени файла, используя объектную переменную, цикл или оператор Open. Подробнее » VBA Excel. Проверка состояния книги (открыта или закрыта)

VBA Excel. Проверка существования листа

Проверка существования листа в рабочей книге Excel из кода VBA с помощью присвоения его объектной переменной или перебора существующих листов циклом. Подробнее » VBA Excel. Проверка существования листа

VBA Excel. Личная книга макросов (создание, расположение)

Создание, расположение, удаление и добавление Личной книги макросов (PERSONAL.XLSB), предназначенной в Excel для записи, хранения и вызова процедур. Подробнее » VBA Excel. Личная книга макросов (создание, расположение)

VBA Excel. Событие Worksheet.SelectionChange

Событие Worksheet.SelectionChange, используемое в VBA Excel для запуска процедур при выборе диапазона на рабочем листе, в том числе отдельной ячейки. Подробнее » VBA Excel. Событие Worksheet.SelectionChange

VBA Excel. Учет расхода воды и других ресурсов

Учет расхода холодной воды и других коммунальных ресурсов по показаниям счетчиков с помощью VBA Excel. Расчет и хранение данных в электронном виде. Подробнее » VBA Excel. Учет расхода воды и других ресурсов

VBA Excel. Метод Application.OnTime

Выполнение процедуры VBA Excel без аргументов в назначенное время или через определенный промежуток времени с помощью метода Application.OnTime. Подробнее » VBA Excel. Метод Application.OnTime

VBA Excel. Список файлов в папке

Получение списка файлов в указанной папке с помощью кода VBA Excel. Коллекция Files объекта Folder, возвращенного методом FileSystemObject.GetFolder. Подробнее » VBA Excel. Список файлов в папке

VBA Excel. Создание, копирование, перемещение папок

Создание, копирование, перемещение и удаление папок в VBA Excel методами объекта FileSystemObject. Удаление папок с помощью оператора RmDir. Подробнее » VBA Excel. Создание, копирование, перемещение папок

VBA Excel. Копирование и перемещение файлов

Копирование и перемещение файлов в VBA Excel с помощью методов CopyFile и MoveFile объекта FileSystemObject. Синтаксис, параметры, примеры. Подробнее » VBA Excel. Копирование и перемещение файлов

VBA Excel. Удаление файлов

Удаление любых файлов в VBA Excel с помощью оператора Kill и метода DeleteFile объекта FileSystemObject. Знаки подстановки, синтаксис, примеры. Подробнее » VBA Excel. Удаление файлов

VBA Excel. Создание файлов

Создание файлов Excel методами Workbooks.Add, Worksheet.Copy и текстовых файлов с помощью оператора Open и метода CreateTextFile из кода VBA Excel. Подробнее » VBA Excel. Создание файлов

VBA Excel. Функции Space, String и StrReverse

Функции Space, String и StrReverse, предназначенные в VBA Excel для создания строк из повторяющихся символов и смены порядка следования знаков. Подробнее » VBA Excel. Функции Space, String и StrReverse

VBA Excel. Тип данных Decimal

Тип данных Decimal используется в VBA Excel только внутри типа Variant. Максимальное общее количество значащих цифр до запятой и после нее равно 29. Подробнее » VBA Excel. Тип данных Decimal

VBA Excel. Функция Format (синтаксис, параметры, примеры)

Преобразование чисел, дат и строк в настраиваемый текстовый формат из кода VBA Excel с помощью функции Format. Синтаксис, параметры, символы, примеры. Подробнее » VBA Excel. Функция Format (синтаксис, параметры, примеры)

VBA Excel. Правильные имена переменных и процедур

Правила наименования переменных, констант, процедур и аргументов пользовательских функций в VBA Excel. Использование суффиксов в именах переменных. Подробнее » VBA Excel. Правильные имена переменных и процедур

VBA Excel. Метод Range.Replace (замена текста в ячейках)

Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel. Подробнее » VBA Excel. Метод Range.Replace (замена текста в ячейках)

VBA Excel. Функция Replace (замена подстроки)

Замена части строкового выражения в VBA Excel по указанному шаблону поиска и замены и возврат преобразованной строки с помощью функции Replace. Подробнее » VBA Excel. Функция Replace (замена подстроки)

Читайте также: