Любой символ vba excel

Знаки подстановки для шаблонов в VBA Excel. Знаки подстановки для методов Find и Replace. Знаки подстановки для оператора Like.

Как ни странно, но для метода Find и оператора Like в VBA Excel правила использования знаков подстановки для шаблонов поиска (Find) и сравнения строк (Like) различаются, причем оператор Like имеет некоторые преимущества. Например, знак # при сравнении строк с помощью оператора Like обозначает любую цифру, а при поиске методом Find — только самого себя.

Знаки подстановки для методов Find и Replace

Знаки в шаблоне Совпадения в строке (диапазоне ячеек)
? Знак вопроса обозначает любой отдельный символ
* Звездочка обозначает любое количество любых символов, в том числе ноль символов
~ Тильда ставится перед ?, * и ~, чтобы они обозначали сами себя (например, чтобы тильда в шаблоне обозначала сама себя, записать ее нужно дважды: ~~)

Знаки подстановки для оператора Like

Знаки в шаблоне Совпадения в сравниваемой строке
? Знак вопроса обозначает любой отдельный символ, в том числе любую цифру
* Звездочка обозначает любое количество любых символов, в том числе ноль символов
# Решетка обозначает любую цифру (0-9)
[СписокСимволов] Любой отдельный знак, входящий в СписокСимволов
[!СписокСимволов] Любой отдельный знак, не входящий в СписокСимволов

Знаки ?, *, # и [ (открывающая скобка) обозначают сами себя внутри квадратных скобок, а ] (закрывающая скобка) — вне квадратных скобок. Более подробно о знаках подстановки для оператора Like можно прочитать здесь.

Пример использования шаблона

Поиск в диапазоне ячеек, содержимое которых начинается с цифр (с помощью оператора Like):

Sub Primer()

Dim myCell As Range

  For Each myCell In Range(«A1:A6»)

    If myCell Like «#*» Then

      myCell.Interior.color = vbGreen

    End If

  Next

End Sub

В этом примере шаблон «#*» состоит из решетки «#», которая обозначает одну первую цифру, и звездочки «*», которая обозначает любое количество любых символов, в том числе ноль символов. Если содержимое ячейки соответствует шаблону (начинается с цифры), ячейка окрашивается в зеленый цвет.

Более широкие возможности для работы с шаблонами заложены в регулярных выражениях, представленных объектом RegExp.

vba like operator

The VBA Like operator is something so useful I am often surprised how rarely it is used in Excel and Access VBA. I often tend to see the Like operator as the last resort before using Regular Expressions in VBA. It replaces greatly the VBA InStr function when needing to check if a certain substring is present within a certain string. So let’s get right to it!

Here is a simple example of using the Like operator:

Dim val As String: val = "Dog and Cat"
If val Like "*Dog*" Then
   Debug.Print "Found Dog"
End If

'Result: "Found Dog"

The Like operator is an easier alternative to VBA Regex which allows you to search for almost any pattern within a string and find matches.

In case you want to not only find check if the string contains a substring but also return the position of the match – best try using the VBA InStr function.

The VBA Like operator is a boolean operator that return True if a string is matched against a certain string pattern.

Debug.Print "Dog and Cat" Like "*Dog*"  'Result: True
Debug.Print "Dog and Cat" Like "*Cow*"  'Result: False

VBA Like allows you also to use the following wildcards to replace certain strings or characters:

Wildcard Description
* matches any number of characters
? matches any 1 character
[ ] matches any 1 character specified between the brackets
matches any range of characters e.g. [a-z] matches any non-capital 1 letter of the alphabet
# matches any digit character

The Like operator is not letter case sensitive! In case you need upper/lower case matching use VBA InStr function instead

And that is basically it. Easy right? Let’s see some examples…

VBA Like operator examples

Let us now look at a couple of examples that greatly show all the possibilities of the Like operator:

Matching against letters

If "Animal" Like "[A-Z]*" then 
   Debug.Print "Match: String starting with Capital letter!"
End If

Matching against numbers

If "My house number is 22" Like "*##" then 
   Debug.Print "Match: String contains a 2 digit number"
End If

Matching a phone number with either dashes or dots

Debug.Print "123-345-678" Like "###[-.]###[-.]###" 'Result: True

Matching a certain string within another string

Debug.Print "fewfwfewfwefdogfefweff" Like "*dog*" 'Result: True

As you can see in the first row we are using the Like Operator similarly as we use other compare operators (=, >, <, <>). The Like operator let’s you validate if a string on the left side of the operator matches the Like expression on the right.

Conculsions on the VBA Like operator

My main take-aways are:

  • Use the VBA Like instead of the InStr function to check if a string contains a substring, if you don’t care about the letter case
  • Consider using the VBA Like before resorting to VBA Regular Expressions
  • Be sure to master string manipulation too!

Проверка текста по маске

В языке 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, как их использовать

Оператор Like VBA

Like — это оператор в VBA, и это оператор сравнения, который сравнивает заданную строку в качестве аргумента в наборе строк и соответствует шаблону, если шаблон соответствует, то полученный результат является истинным, а если шаблон не соответствует, то полученный результат ложный, это встроенный оператор в VBA.

Оператор «LIKE» — самый недоиспользуемый оператор, несмотря на прекрасное использование. Я не видел много людей, которые использовали бы этот оператор в полной мере в своем кодировании. Фактически, я один из тех, кто не использует этот оператор достаточно часто. Оператор «VBA LIKE» позволяет нам сопоставить образец строки с полной строкой. Используя оператор VBA LIKE, мы можем сравнить две строки с заданным шаблоном. Мы можем проверить, содержит ли строка подстроку в VBA, или мы также можем проверить, содержит ли строка какой-либо определенный формат. Если шаблон соответствует строке, оператор VBA LIKE возвращает TRUE или FALSE.

При сопоставлении строк нам нужно использовать подстановочные знаки для указанного шаблона. Ниже приведены подстановочные знаки, которые мы используем в операторе VBA LIKE.

  • Вопросительный знак (?): Используется для сопоставления любого символа в строке. Например, если у нас есть строка «CAT», а шаблон — «C? T», тогда оператор VBA LIKE возвращает TRUE. Если строка — «CATCH, а шаблоны -« C? T », тогда оператор VBA LIKE возвращает FALSE.
  • Звездочка (*): соответствует нулю или большему количеству символов. Например, если строка имеет значение «Хорошо», а шаблон — «G ** d», оператор VBA LIKE возвращает значение ИСТИНА.
  • Скобки ([]): соответствует любому одиночному символу, указанному в скобках.
  • [Char-Char]: соответствует любому одиночному символу в диапазоне Char-Char.
  • [! Chars]: соответствует любому одиночному символу, отсутствующему в списке.
  • [! Char-Char]: соответствует любому одиночному символу, не входящему в диапазон Char-Char.

Примеры оператора VBA LIKE

Давайте теперь посмотрим на некоторые примеры оператора LIKE в VBA.

Вы можете скачать этот шаблон VBA Like Excel здесь — Шаблон VBA Like Excel

Пример №1 — С вопросительным знаком

Код:

 Sub QuestionMark_Example1 () Dim k As String k = "Good" If k Like "Go? D" Then MsgBox "Yes" Else MsgBox "No" End If End Sub 

В приведенном выше коде мы предоставили строку как «Хорошо», а шаблон — «Go? D». Поскольку вопросительный знак может соответствовать одному символу, результат будет отображаться как «Да».

Теперь поменяю строку на «Доброе утро».

Код:

 Sub QuestionMark_Example1 () Dim k As String k = "Доброе утро" Если k Like "Go? D" Тогда MsgBox "Yes" Else MsgBox "No" End If End Sub 

В этом случае будет показано «Нет», потому что мы добавили в строку еще одно слово, то есть «Утро». Чтобы соответствовать любому количеству символов, нам нужно использовать звездочку.

Пример # 2 — Со звездочкой

Код:

 Sub QuestionMark_Example2 () Dim k As String k = "Доброе утро" Если k Like "* Good *" Then MsgBox "Yes" Else MsgBox "No" End If End Sub 

В приведенном выше примере я добавил две звездочки до и после символа «* Хорошо *». Это будет соответствовать слову «Хорошо» в строке «Доброе утро» и вернет «Да».

Пример № 3 — Со скобками []

Код:

 Sub QuestionMark_Example3 () Dim k As String k = "Доброе утро" Если k Like "* [M] *" Then MsgBox "Yes" Else MsgBox "No" End If End Sub 

Приведенный выше код соответствует единственной букве, указанной в скобке «M», и возвращает ответ «Да».

Пример №4 — Со скобками и алфавитами [AZ]

Код:

 Sub QuestionMark_Example4 () Dim k As String k = "Доброе утро" Если k Like "* [AD] *" Then MsgBox "Yes" Else MsgBox "No" End If End Sub 

Выше я упомянул символы для соответствия от A до D.

Это возвращает «Нет» , потому что нет никаких символов от А до D в строке «Доброе утро» .

Теперь я изменю шаблон на [AH]

Код:

 Sub QuestionMark_Example4 () Dim k As String k = "Доброе утро" Если k Like "* [AH] *" Then MsgBox "Yes" Else MsgBox "No" End If End Sub 

Это вернет «Да», потому что от A до H у нас есть символ «G» в строке «Доброе утро».

Таким образом, мы можем использовать оператор VBA «LIKE» для сопоставления любой строки из шаблона с символами подстановки.

Используется для сравнения двух строковых выражений.

результат = строка Like образец

Параметры
результат
Обязательный; любая числовая переменная.
строка
Обязательный; любое строковое выражение.
образец
Обязательный; любое строковое выражение, удовлетворяющее описанным ниже соглашениям о сравнениях строк с образцом.

Замечания
Если значение переменной строка соответствует значению переменной образец, результат имеет значение True; при их несоответствии результат имеет значение False. Если любой из операндов, строка или образец, имеет значение Null, результат также имеет значение Null.
Характеристики оператора Like определяются настройкой, задаваемой в инструкции Option Compare. Если не указано другое, то стандартный способ сравнения строк в каждом модуле задается инструкцией Option Compare Binary.

Инструкция Option Compare Binary указывает способ сравнения строковых значений, основанный на порядке сортировки, который определяется внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей. Ниже демонстрируется типичный пример упорядочивания символов:

A < B < E < Z < a < b < e < z < А < К < Ш < а < к < ш

Инструкция Option Compare Text указывает способ сравнения строковых значений, основанный на порядке сортировки по алфавиту без учета регистра, который определяется национальной настройкой системы. Приведенная выше последовательность символов при сортировке с настройкой Option Compare Text будет упорядочиваться следующим образом:

(A=a) < (B=b) < (E=e) < (Z=z) < (А=а) < (К=к) < (Ш=ш)

Существуют встроенные средства сравнения строковых значений, допускающие использование в образце подстановочных знаков, списков символов и диапазонов символов. В следующей таблице перечислены специальные символы, используемые в переменной образец, и соответствующие им символы в переменной строка:

Специальные символы	Совпадающие символы
?			Любой одиночный символ.
*			Любое количество символов или отсутствие символа.
#			Любая одиночная цифра (0–9).
[список]			Любой одиночный символ, входящий в список.
[!список]			Любой одиночный символ, не входящий в список.

Любой одиночный символ в переменной строка может быть сравнен с группой из одного или нескольких символов (список), заключенных в квадратные скобки ([ ]). Такая группа может содержать символы практически с любыми кодами, включая цифры.
Специальные символы левая квадратная скобка ([), вопросительный знак (?), символ (#) и звездочка (*) сравниваются как обычные символы, только если они заключены в квадратные скобки. Правая квадратная скобка (]) в группе всегда рассматривается как специальный символ, но может сравниваться как обычный символ вне группы.
В дополнение к простому списку символов в квадратных скобках, допускается указание в образце диапазона символов с помощью дефиса (–), отделяющего нижнюю и верхнюю границы диапазона. Например, [A-Z] указывает, что совпадающими будут считаться все символы верхнего регистра латинского алфавита, находящиеся в нужной позиции в переменной строка. Допускается указание внутри прямых скобок нескольких диапазонов без символов разделителей.
Конкретный вид указанного диапазона определяется действующим во время выполнения способом упорядочивания символов (который задается инструкцией Option Compare и национальной настройкой системы). Если использовать приведенный выше пример в режиме Option Compare Binary, то диапазону [A–E] соответствуют символы A, B и E. В режиме Option Compare Text, образцу [A–E] соответствуют символы A, a, А, а, B, b, E, e. Отметим, что в это диапазон не попадают символы К или к, поскольку все символы русского алфавита размещаются в порядке сортировки после стандартных символов латинского алфавита.
Существуют также следующие правила, действующие при сравнении с образцом:
Восклицательный знак (!) в начале перечня список указывает, что совпадающим с образцом считается любой символ в соответствующей позиции в операнде строка, за исключением входящих в список. Вне квадратных скобок восклицательный знак рассматривается как обычный символ.
Дефис (–) в начале списка или сразу после восклицательного знака, а также в конце списка рассматривается как обычный символ. В любой другой позиции внутри квадратных скобок он рассматривается как определение диапазона.
Определять диапазон необходимо в порядке возрастания. [A-Z] является допустимым определением диапазона, а [Z-A] недопустимым.
Пустая пара квадратных скобок [] игнорируется; она рассматривается как пустая строка («»).
В некоторых языках имеются специальные символы алфавита, представляющие пару букв. Например, символ «ж» представляет стоящие рядом буквы «a» и «e». Оператор Like распознает такой символ и соответствующую пару букв как эквивалентные.
Если в системных национальной настройке указан язык, в котором используются специальные символы, то включение такого символа и в переменную образец, и в переменную строка приводит к тому, что эквивалентная пара в букв в другом операнде рассматривается как совпадающая с этим символом. Аналогично, при включении специального символа в образец внутри квадратных скобок (одного символа или как часть определения списка или диапазона) он представляет эквивалентную пару букв в операнде строка.

Пример
В данном примере демонстрируется использование оператора Like для сравнения строкового значения с образцом.

Dim MyCheck
MyCheck = "aBBBa" Like "a*a"		' Возвращает True.
MyCheck = "F" Like "[A-Z]"			' Возвращает True.
MyCheck = "F" Like "[!A-Z]"			' Возвращает False.
MyCheck = "a2a" Like "a#a"			' Возвращает True.
MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' Возвращает True.
MyCheck = "BAT123khg" Like "B?T*"		' Возвращает True.
MyCheck = "CAT123khg" Like "B?T*"		' Возвращает False.

Понравилась статья? Поделить с друзьями:
  • Любой знак в формуле excel
  • Любой документ созданный в excel это
  • Любой график в excel
  • Любое число в excel формула
  • Любое число excel весь столбец