Страницы: 1
RSS
FIND ругается, не находит значение, VBA
 
Добрый день.
Никак не могу определить, из-за чего Find упорно не находит в ячейке R17C20 искомое?
Предполагаю, что на вашем ПК макрос будет срабатывать, поэтому покажу скрин.    
Изменено: Владимир - 04.10.2017 14:10:27
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
штатный ПОИСК с такими параметрами тоже не находит, а вот если сманить "область поиска" - "значение" на "формула" будет искать.
Изменено: V - 04.10.2017 14:10:42
 
Да, действительно при xlFormulas находит.
Но почему, там ведь нет ни ссылки, ни формулы?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Привет, Володя!
При ширине колонки C20  < 11 пиксел, видимости цифры нет.И Find ругается.Почему тоже не знаю.
 
Может быть, проблема в формате?
 
Find ищет значения (LookIn:=xlValues) только в ячейках, значения которых отображаются, а в данном случае ширина столбца T равна 0.25 стандартного символа и если снять объединение ячеек, то числа 3 в T17 не будет видно. Аналогичная ситуация возникает, когда большое число не вмещается в ячейку и в ячейке отображаются символы "#", или когда ячейка скрыта фильтром либо вручную.
При параметре LookIn:=xlFormulas у функция Find такого ограничения нет и Find "заглядывает" в формулы, но если нужно найти результат формулы ячейки, то LookIn:=xlFormulas не поможет, так как значения совпадают с формулами только у констант.
Изменено: ZVI - 04.10.2017 19:52:23
 
ZVI!
Вы - ЭНЦИКЛОПЕДИЯ!
А мы - любители метода научного тыка... :D  :D  :D  
 
Добрый вечер, Мотя! Просто на эти грабли я чаще наступал :)
 
ZVI!
А каковы рекомендации по поводу использования функции Find для таких "нестандартных" файлов, как у автора темы?
Как я поняла, для "стандартных" файлов проблем не будет?
Или надо помнить о форматах при поиске?
 
Одна из рекомендаций уже была - искать Find-ом с LookIn:=xlFormulas
Вот еще пара вариантов:
Код
Sub Test()
  'формула =ПОИСКПОЗ(3;17:17;0) или на англ =MATCH(3,17:17,0)
  Debug.Print 1, WorksheetFunction.Match(3, Rows(17), 0)
  Debug.Print 2, Evaluate("MATCH(" & 3 & "," & "17:17" & ",0)")
End Sub

Можно и в массив загнать значения диапазона, а затем в цикле пробежаться, это достаточно быстро, но диапазон желательно ограничить с промощью UsedRange, чтобы далеко не бегать, когда значения нет в диапазоне.
Изменено: ZVI - 04.10.2017 21:32:28
 
ZVI!
Спасибо!!!
У меня с Find были "заморочки": "рукопашные" данные из заявок должны были найти "братьев" в БД.
Конечно, была проблема с "лишними" пробелами. :D  
 
Спасибо друзья-коллеги, вы мне очень помогли.
Доброго вам здоровья.
:)
-------
Код
ActiveSheet.UsedRange.ColumnWidth = 3
Помогло.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
Страницы: 1
Наверх