- Excel VBA: `range.find ()` не находит значения, которые отображаются как `####`
- 5 ответов
- VBA Excel. Метод Find объекта Range
- Предназначение и синтаксис метода Range.Find
- Синтаксис метода Range.Find
- Параметры метода Range.Find
- Знаки подстановки для поисковой фразы
- Простые примеры
- Excel VBA почему не выполняется поиск в объединенных ячейках?
- Range.Find метод не работает при адресации ячеек r1c1 — error 1004
- Функция поиска VBA не работает
- 3 ответа
Excel VBA: `range.find ()` не находит значения, которые отображаются как `####`
Я пытаюсь найти конкретное значение в определенном столбце. Например, значение 100000 в столбце B . Следующий код работает, только если столбец достаточно широк, чтобы отобразить полное число:
Как только столбец сужается, Excel отображает только ##### вместо 100000 в определенной ячейке, метод find возвращает Nothing .
Есть ли способ использовать метод find, основанный на фактических значениях, а не на отображении значений? Если нет, есть ли альтернативы For Each cell In rng.Cells ? В конце концов, я освобождаю метод, который использует наименьшее количество ресурсов.
Примечание: searchRange — это только один столбец, searchValue либо не существует, либо существует только один раз.
Примечание. Существует дополнительный вопрос об использовании match () Примечание: время от времени это работает, хотя ни данные, ни код не меняются. К сожалению, я не могу воспроизвести изменения. Все это может быть ошибкой
5 ответов
Может воспроизвести сбой Find , если ширина столбца слишком мала.
Match не имеет этой проблемы.
В зависимости от вашего варианта использования это может быть вариант, а если нет, то может быть Range.AutoFit ? Хотя с «Я пытаюсь найти определенное значение в определенном столбце», похоже, что это может быть вариант.
Вы можете либо получить диапазон в массив и зациклить массив, либо просто использовать MATCH:
Проблема с find заключается в том, что по какой-то причине он ищет только отображаемые значения, идентично поведению окна поиска, которое вы получаете при нажатии crtl+F или выборе опции «Найти и выбрать» на ленте «Главная». В настоящее время нет известного способа исправить это (просматривая xlValues и тому подобное, как указано в комментариях) Поскольку есть разные способы обойти это, самый (самый медленный), но самый надежный — это использовать цикл foreach следующим образом:
Просто убедитесь, что вы устанавливаете свой диапазон как определенное значение, например Range(«A1:B87») вместо Columns(2) , так как это вызовет ошибку несоответствия типов. Если вы хотите найти столбец B, используйте Range(«B:B») .
Источник
VBA Excel. Метод Find объекта Range
Метод Find объекта Range для поиска ячейки по ее данным в VBA Excel. Синтаксис и компоненты. Знаки подстановки для поисковой фразы. Простые примеры.
Предназначение и синтаксис метода Range.Find
Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.
Синтаксис метода Range.Find
Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.
В скобках перечислены параметры метода, среди них только What является обязательным.
Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.
Если необходимо найти следующие ячейки, содержащие поисковую фразу, используется метод Range.FindNext.
Параметры метода Range.Find
| Наименование | Описание |
|---|---|
| Обязательный параметр | |
| What | Данные для поиска, которые могут быть представлены строкой или другим типом данных Excel. Тип данных параметра — Variant. |
| Необязательные параметры | |
| After | Ячейка, после которой следует начать поиск. |
| LookIn | Уточняет область поиска. Список констант xlFindLookIn:
|
| LookAt | Поиск частичного или полного совпадения. Список констант xlLookAt:
|
| SearchOrder | Определяет способ поиска. Список констант xlSearchOrder:
|
| SearchDirection | Определяет направление поиска. Список констант xlSearchDirection:
|
| MatchCase | Определяет учет регистра:
|
| MatchByte | Условия поиска при использовании двухбайтовых кодировок:
|
| SearchFormat | Формат поиска – используется вместе со свойством Application.FindFormat. |
* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments и MsgBox xlNotes .
** Тесты показали неработоспособность метода Range.Find с константой xlFormulas в моей версии VBA Excel.
В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.
Знаки подстановки для поисковой фразы
Условные знаки в шаблоне поисковой фразы:
- ? – знак вопроса обозначает любой отдельный символ;
- * – звездочка обозначает любое количество любых символов, в том числе ноль символов;
Простые примеры
При использовании метода Range.Find в VBA Excel необходимо учитывать следующие нюансы:
- Так как этот метод возвращает объект Range (в виде одной ячейки), присвоить его можно только объектной переменной, объявленной как Variant, Object или Range, при помощи оператора Set.
- Если поисковая фраза в заданном диапазоне найдена не будет, метод Range.Find возвратит значение Nothing. Обращение к свойствам несуществующей ячейки будет генерировать ошибки. Поэтому, перед использованием результатов поиска, необходимо проверить объектную переменную на содержание в ней значения Nothing.
В примерах используются переменные:
- myPhrase – переменная для записи поисковой фразы;
- myCell – переменная, которой присваивается первая найденная ячейка, содержащая поисковую фразу, или значение Nothing, если поисковая фраза не найдена.
Источник
Excel VBA почему не выполняется поиск в объединенных ячейках?
Всем привет!
Столкнулся с проблемой, что в Excel 2013 не выполняется поиск текста программным способом из VBA и C# в объединенных ячейках . Ручной поиск выполняется нормально. Записываю макрос поиска по содержимому, поиск находит ячейки. После записи макроса, пытаюсь выполнить его в режиме отладки и вижу, что одиночная ячейка находится, а объединенная — нет.
Текст макроса:
содержимое листа:
Ссылка на файл с макросом ge.tt/849QWKC2/v/0?c
- Вопрос задан более трёх лет назад
- 2939 просмотров
Надо произвести поиск по колонкам, то есть по столбцам.
ub Прейре_к_запису()
‘ Макрос Прейре к запису
Dim nomdoma As Object
Dim a As Object
Dim b As Object
Dim ws As Worksheet
Dim c As Object
Dim d As Object
Dim e As Integer
Set a = Workbooks(1).Worksheets(1).Range(«E18»)
Set b = Workbooks(1).Worksheets(1).Range(«E19»)
Источник
Range.Find метод не работает при адресации ячеек r1c1 — error 1004
Всем привет, собственно сабж.
ВОт проблемный код (ошибка вылетает на строке 16 из-за того, что лист4 не активирован.
прикладываю файл excel
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вложения
| new-old VBA.xls (41.0 Кб, 31 просмотров) |
Доброго времени суток! Суть проблемы такова, есть список товаров, у которых есть артикул и чтобы.
Метод Range.Find выдает ошибку
Всем привет! Такая вот занятная штука. Хотел использовать Find, чтобы найти фрагмент формулы. Как.
Десятичный разделитель, янв.63 вместо 1,63 и метод Range.Find
Всем привет! Имеем HTML-файл с продажами по покупателям в таблице, несколько столбцов — числа в.
Выходит ошибка runtime error 1004 method range of object global failed при загрузки данных из файла.
Источник
Функция поиска VBA не работает
Я пытаюсь использовать код VBA для поиска значения на другом листе и вернуть номер строки, чтобы соседняя ячейка могла быть заполнена строкой. Проблема в том, что «findrow» возвращается пустым. «.Find (findrng) отображается как 14.01.17, когда я пытаюсь запустить и навести курсор на эту часть.
Если я изменю Findrng на такое слово, как «Home» и введу его в файл, код вернет правильный номер строки, поэтому проблема должна быть связана с датой. Может кто-нибудь помочь с использованием .Find для дат?
3 ответа
Findrng — это строка, а в данных есть дата, поэтому она точно ничего не вернет.
Если вы не уверены, что ваш код будет искать строку погоды или дату, сначала найдите значение в виде строки, если не найдено, преобразуйте его в дату и выполните поиск снова.
Метод Find имеет ряд необязательных аргументов, которые не имеют предопределенных значений по умолчанию, но, скорее, они по умолчанию имеют значения, которые использовались последним, либо через код, либо через пользовательский интерфейс Excel. Вы должны явно указать все аргументы, чтобы добиться последовательного и ожидаемого поведения .
Метод Range.Find определяется как:
Function Find(What, Optional After, Optional LookIn, Optional LookAt, Optional SearchOrder, Optional SearchDirection As XlSearchDirection = xlNext, Optional MatchCase, Optional MatchByte, Optional SearchFormat) As Range
Вам необходимо указать значения для всех этих аргументов, даже если они помечены как Optional
Метод Find также может возвращать ссылку Nothing , если совпадение не может быть найдено, поэтому перед проверкой свойства Row необходимо проверить Nothing . Например:
Вы должны Dim FindRowNumber иметь Long
Источник