Страницы: 1
RSS
Как методом Find в VBA найти строку с использованием *,? как в обычном поиске Windows
 
Подскажите, пожалуйста, можно ли в маске строки поиска (VBA)методом Find  
использовать *,? для расширения вариантов поиска как в обычном поиске  
Excel или Windows
 
Может это поможет?    
 
http://www.planetaexcel.ru/forum.php?thread_id=7255
 
{quote}{login=Pavel55}{date=03.12.2008 07:31}{thema=}{post}Может это поможет?    
 
http://www.planetaexcel.ru/forum.php?thread_id=7255{/post}{/quote}  
Эта тема про другое.  
Так как нет ответов, то ,наверное, такая возможность нереализвана в стандартных процедурах VBA. Тогда, как это можно сделать оптимальным образом.  
Буду признателен за помощь.
 
Что-то не увидел проблемы.  
вот что записал макрорекордер:  
   Cells.Find(What:="Т?к", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _  
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _  
       , SearchFormat:=False).Activate  
При прогоне нашел и "так" и "тук"
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=03.12.2008 08:44}{thema=}{post}Что-то не увидел проблемы.  
вот что записал макрорекордер:  
   Cells.Find(What:="Т?к", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _  
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _  
       , SearchFormat:=False).Activate  
При прогоне нашел и "так" и "тук"{/post}{/quote}  
Спасибо за помощь.
 
Иными словами вы задаёте вопрос на форуме, хотя сами даже не попробовали написать и строчки кода? Типа "А нафига мне писать код и его тестировать, если можно создать тему на форуме, а там ребята и напишут, и протестируют, и готовый код мне напишут. И ещё скажут: "Да, не волнуйся ты так, всё прекрасно работает и со знаком вопроса и со звёздочкой, т.е. с любым символом подстановки".    
 
Я прав? Нафига было создавать тему, если вы даже не успели столкнуться с проблемой?  
 
Sub Макрос1()  
Dim rFoundRng As Range  
Dim sTextToSearch As String  
   sTextToSearch = "т*к"  
   Set rFoundRng = Cells.Find(sTextToSearch, , xlFormulas, xlPart)  
   If Not rFoundRng Is Nothing Then  
       MsgBox "Найдено: " & rFoundRng, 64, "Поиск"  
   Else  
       MsgBox "На листе ничего не найдено!", 48, "Поиск"  
       Exit Sub  
   End If  
End Sub  
 
Данный код находит такие слова как:  
- тук  
- так  
- тампакс  
- томск  
- телекс
 
Павел, что-то мне показалось подозрительным: по маске "т*к" слово телекс не должно находиться. Вот если бы "т*к*", то да. Штатный поиск именно так и сработает. А Ваш макрос нашёл и слово "стук", хотя не должен был. Или я чего-то не того?
 
а по-моему, должно )  
Вот ещё пример поиска слова "телекс"  
 
sTextToSearch = "т???к"  
 
А, чтобы найти "стук" можно так  
 
sTextToSearch = "т?к"  
 
Т.е. Звёздочка (*) заменяет любое количество символов и в примере "т*к" буквы "т" и "к" не обязательно должны быть "т" - первой буквой в слове, а "к" - последней. Тоже самое и со знаком вопроса (?).
 
Павел, я вот тут вспомнил времена DOS и NC. Так вот там такой вариант не сработает. Преемники NC Windows/Total командиры продолжают его традиции: создал сейчас файл с именем "телекс". Попросил командира по маске "т*к" найти его - нету, говорит. Набираю маску "т*к*" - находится.
 
конечно, я согласен с вами. Какой-то косячок ). Отсюда резонный вопрос, как найти слово(а) начинающиеся на "т" и заканчивающиеся на "к"... надо подумать)
 
А может отдаться на откуп рекордеру?  
Cells.Find(What:="т*к", After...  
корректно работает.
 
т.е. ты хочешь сказать, что твой код не находит слово "телекс" на листе?  
 
Вот я сейчас написал слово "телекс" на листе, включил запись макроса и ввёл строку поиска "т*к", нажал "Найти далее", макрос нашёл ячейку со словом "телекс". Вот код  
 
Sub Макрос2()  
   Cells.Find(What:="т*к", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _  
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _  
       , SearchFormat:=False).Activate  
End Sub  
 
Так что и мой код и записанный рекордером - оба находят слово "телекс" по поиску "т*к"
 
А вот так:  
Sub Макрос3()  
   Cells.Find(What:="т*к", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _  
       xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _  
       , SearchFormat:=False).Activate  
End Sub  
На листе два слова: Ток и Телекс. Находится ток.  
Да ладно - я сам вижу, что и в Word поиск не совсем так. Я про подстановки. Только хотел сказать, что корректнее было бы выполнение поиска по маске, например, для слов токсин, такси, таксофон не "т*к", а "т*к*". Т.е. после К любое количество любых символов. И ведь в командере именно так и происходит.
 
По-моему, я понял!  
Тут важную роль играет аргумент LookAt, который может быть либо xlPart, либо xlWhole, т.е. искать часть ячейки или ячейка целиком (галочка снята или поставлена)  
 
Так вот, если мы задаём критерий поиска "т*к", то если xlPart - то код ищет и телекс и ток и т.д., а если xlWhole, то код найдёт только ток, тук, так  
 
Вроде загадка разгадана) можно спать спокойно )
 
:-)
 
http://www.planetaexcel.ru/forum.php?thread_id=7351  
 
тема на 10 строк ниже
Страницы: 1
Читают тему
Наверх