Vba excel findnext не работает
Продолжается поиск, начатый с помощью метода 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 (замена подстроки)
Читайте также: