Страницы: 1
RSS
[VBA] Find. Поиск различных значений в одной ячейке (или). Ошибка Select Case, Возможно ли задать несколько ключевых слов для поиска?
 
Всем доброго дня!

Ячейка может содержать разные ключевые слова (не фразы). В зависимости от этого данные переносятся в ту или иную ячейку другой таблицы.
Возможно ли при помощи функции Find (или другого способа) искать несколько ключевых слов одновременно (в фармате ИЛИ).
В первом случае происходит поиск в ячейке слова "списание", нужно чтобы было "списание или выдача или наличные".

Код
Set keyWord = Range(Cells(y, 3), Cells(x, 3))
               keyWordCash = keyWord.Find("списание", , xlValues, xlPart).Value


Если в ячейке встречается одно из этих слов, то происходит:
Код
 Select Case keyWord
                    Case Is = keyWordCash
                        Range("L2") = Range("F12")]

Код полностью:

Код
Dim keyWord As Range
Dim keyWordCash As Variant ' ключевые слова "наличные"
Dim keyWordTopOn As Range 'ключевые слова "пополнение счета", приходная операция

  x = 12
  y = 12

              
              Set keyWord = Range(Cells(y, 3), Cells(x, 3))
               keyWordCash = keyWord.Find("списание", , xlValues, xlPart).Value
              Set keyWordTopOn = keyWord.Find("пополнение", , xlValues, xlPart)
'              MsgBox keyWordCash
              
              
              Select Case keyWord
                    'снятие наличных
                    Case Is = keyWordCash
                        Range("L2") = Range("F12")
                        
                    Case Is = keyWordTopOn
                        Range("K2") = Range("F12")
                    
              End Select


Попутный вопрос.
Select case работает "сверху вниз". При выполнении первого "если" остальные пропускаются. При невыполнении первого "если" программа переходит ко второму "если". У меня же выдает ошибку: В ячейке отсутствует ключевое слово "снятие", а VBA не дает "перепрыгнуть" первый первый Case "keyWordCash" и перейти ко второму "keyWordTopOn".  Как с этим бороться? Скрины и файл с кодом прилагаю. Спасибо!
 
Gipsy14, здравствуйте
Цитата
Gipsy14: Ячейка может содержать разные ключевые слова (не фразы). Возможно ли искать несколько ключевых слов одновременно
Код
Изменено: Jack Famous - 17.08.2022 09:57:46
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Gipsy14, здравствуйте
Цитата
Gipsy14: Ячейка может содержать разные ключевые слова (не фразы). Возможно ли искать несколько ключевых слов одновременно
Код        
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17      Sub   t()    Dim   rng   As   Range, cl   As   Range    Dim   x, aWords, tx$       Set   rng = Range(  "A1:B2"  )    aWords = Array(  "слово1"  ,   "слово2"  ,   "слово3"  ,   "слово4"  )       For   Each   cl   In   rng.Cells          tx = cl.Value          For   Each   x   In   aWords              If   tx   Like   "*"   & x &   "*"   Then                              ' в ячейке cl есть подстрока/фраза/слово x: пишем код, что делать в этом случае                  Exit   For      ' выходим из цикла проверки, т.к. уже нашли              End   If          Next   x    Next   cl    End   Sub   
 

Благодарю!
Есть вариант избежать цикла for? Боюсь запутаться, т.к. в полной процедуре уже есть цикл for each внутри которого будет еще несколько циклов for each. Сколько циклов в цикле допускает VBA?
 
Можно:
1. не пугаться цикла For (вложенных циклов может быть много) :)
2. Вынести пугающий FOR в отдельную процедуру с параметрами и запускать ее из основного кода типа:
Код
For each ....
  Call MySpookyForProcedure (Parameter1, Parameter2,...)
Next
Изменено: Пытливый - 17.08.2022 13:02:37
Кому решение нужно - тот пример и рисует.
 
Поиск не работает. Ищет фразу целиком с учетом регистра.
Нужен поиск именно по ключевым словам, а не по целой фразе.

upd. Работает, но все равно с учетом региста.
Как-то можно это исправить?

upd.2. разобрался с регистром.
Помогла фраза вверху модуля "Option Compare Text"
Изменено: Gipsy14 - 17.08.2022 13:18:42
 
Цитата
Пытливый написал:
Можно:
1. не пугаться цикла For (вложенных циклов может быть много) :)
2. Вынести пугающий FOR в отдельную процедуру с параметрами и запускать ее из основного кода типа:
Код
    [URL=#]?[/URL]       1  2  3      For   each ....        Call   MySpookyForProcedure (Parameter1, Parameter2,...)    Next   
 
Как вариант!
Благодарю!))
 
Цитата
Gipsy14: Есть вариант избежать цикла for? Боюсь запутаться
используйте отступы, чтобы ваш код был понятен. Команда Exit For выводит только из того цикла, в котором находится, а не из всех циклов
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх