Проверка текста по маске
В языке Visual Basic существует один крайне полезный оператор, называемый Like. Он умеет проверять подобие (похожесть) двух текстовых строк. К сожалению, в стандартном наборе функций этот оператор не нашел своего места, но очень легко создать пользовательскую функцию, которая будет это делать.
Откройте редактор Visual Basic, нажав ALT+F11 или выбрав в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor), вставьте новый модуль (меню Insert - Module) и скопируйте туда текст этой функции:
Function MaskCompare(txt As String, mask As String, CaseSensitive As Boolean) If Not CaseSensitive Then txt = UCase(txt) mask = UCase(mask) End If If txt Like mask Then MaskCompare = True Else MaskCompare = False End If End Function
Закройте редактор Visual Basic и вернитесь в Excel.
Теперь через Вставка - Функция (Insert - Function) в категории Определенные пользователем (User Defined) можно найти нашу функцию MaskCompare и воспользоваться ей. Синтаксис функции следующий:
=MaskCompare(txt; mask; CaseSensitive)
где
txt - любой текст или ячейка с текстом, которую мы проверяем на соответствие маске
mask - набор символов, которые ищутся в проверяемом тексте. Набор может содержать спецсимволы подстановки:
- * - любое количество любых символов
- ? - один любой символ
- # - любая цифра (0 - 9)
- [список_символов] - любой символ из списка
- [!список_символов] - все символы, кроме содержащихся в списке
Case_Sensitive - необходимо ли учитывать регистр при проверке:
- 1 - регистр символов учитывается
- 0 - регистр символов не учитывается
Примеры использования функции
Использование спецсимволов в маске открывает перед пользователем широчайшие возможности. Вот несколько примеров масок:
- ### - все числа от 0 до 999
- ????? - все слова из 5 букв
- м*н - все слова, начинающиеся на "м" и заканчивающиеся на "н"
- *[аостр]* - все слова, содержащие хотя бы одну из букв а,о,с,т,р
- *[!abcdefghijklmnopqrstuvwxyz]* - все слова НЕ содержащие английских букв
Ссылки по теме
- Поиск ближайшего похожего слова
- Что такое макросы, куда вставлять код макроса на VBA, как их использовать
В некой ячейке листа я ввожу эту пользовательскую функцию, задаю аргументы, но результат такой: я вижу слово "ЛОЖЬ".
ввести несколько значений например: что бы искал слова, которые могут быть в этом предложении например *идк*(скидка);*кци*(акция);*еди*(кредит), что бы находя хотя бы одно совпадение, формула выдавала бы Истина. Очень нужно (боремся со спамом)
То есть в ячейке первое слово не будет играть ни какой роли?
и как правильно прописывать части слов что бы макрос мог найти с ним совпадение через ; и или
Используете так:
=MaskCompartMulti(A1;"*идк*";"*кци*";"*еди*")
где А1 - ячейка с проверяемым текстом, а потом идут маски поиска в любом количестве через точку с запятой.
Работает по принципу ИЛИ.
Я к сожалению пока не нашел на форуме тут, как это можно реализовать, но у меня вопрос. А можно ли эту формулу заставить просматривать сразу массив данных и выводить количество совпадений по маске. Например есть много строчек с очень разнообразным текстом (более 100 - новости) и я хочу понять в скольких из них встречается слова например "компания" и "запустила". С возможностью соответственно маску менять.
Если вдруг эта тема уже где-то рассматривалась - направьте пожалуйста.
Заранее благодарен.
очень хорошая функция, для своей задачи соединил ее с fuzzylookup, т.е. сначала идет по маске, потом ищет ближайшее похожее, спасибо огромное, выручили в который раз.