Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало. |
|
{quote}{login=Сергей}{date=17.05.2008 02:17}{thema=Как избежать проверки регистра при использовании Like?}{post}Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало. |
|
Я контролирую окончание цикла по одному столбцу, а условие проверяю по другому. И так не срабатывает. Ошибку выдает. If UCase(ActiveCell).Offset(0, 1) Like «*ТЕКСТ*» Then И если уж Вы готовы помочь — как проверить не одну ячейку правее на совпадение, а вторую, третью… десятую. Тоесть диапазон, Что то типа диапазона Offset(0, 1:10) Нет так конечно. Не писать десять раз OR. |
|
{quote}{login=Сергей}{date=17.05.2008 03:17}{thema=}{post}Я контролирую окончание цикла по одному столбцу, а условие проверяю по другому. И так не срабатывает. Ошибку выдает. If UCase(ActiveCell).Offset(0, 1) Like «*ТЕКСТ*» Then И если уж Вы готовы помочь — как проверить не одну ячейку правее на совпадение, а вторую, третью… десятую. Тоесть диапазон, Что то типа диапазона Offset(0, 1:10) Нет так конечно. Не писать десять раз OR.{/post}{/quote} Правильнее так: Для проверки, например, 10-ти ячеек справа от активной: Sub MyTest() Вместо Like иногда удобнее InStr(): |
|
Спасибо. Только у меня возникла сложность. Я использую |
|
Если нужно просто узнать, есть ли фрагмент текста в 10 ячейках правее активной, то можно еще и так (не зависит от регистра): ‘ True, если найдено похожее на What в диапазоне Where Sub Test() |
|
{quote}{login=Сергей}{date=17.05.2008 04:20}{thema=}{post}Спасибо. Только у меня возникла сложность. Я использую |
|
Sub Поиск_ТЕКСТ() |
|
Sub Поиск_ТЕКСТ() ‘ Вспомогательная функция поиска What в Where |
|
{quote}{login=Сергей}{date=17.05.2008 05:04}{thema=}{post}Наше народное Гран Мэрси{/post}{/quote} |
|
А как приспособить вместо строки со скрытием |
|
{quote}{login=Сергей}{date=17.05.2008 11:24}{thema=}{post}А как приспособить вместо строки со скрытием ‘ Вспомогательная функция поиска What в Where |
|
Guest Гость |
#14 17.05.2008 19:31:55 Спасибо за двоих!!! |
Сообщение от Olya1985
да, но мой код с учебной целью, как пример оператора go to при возникновении ошибки. А насчет регистра не подскажете?
Есть ещё несколько и приёмов игнорирования регистра букв.
Самый тупой
Visual Basic | ||
|
вверху окна с программой. Действует на весь модуль.
Также есть параметр vbTextCompare функции
StrComp (дающей 0, когда строки равны):
Visual Basic | ||
|
Действует только в данной строке, независимо от Option Compare вверху модуля.
Ну и, на закуску, мой любимый Like:
Visual Basic | ||
|
(иными словами, «если введённое имя не Howard — перейти к метке WrongName»).
В этом случае, если не включён Option Compare Text (а по умолчанию сравнение точное: Option Compare Binary), то приходится извращаться:
Visual Basic | ||
|
А по-хорошему, в инпутбоксе дожна адекватно работать и кнопка Cancel, посему так:
Visual Basic | ||
|
Используется для сравнения двух строковых выражений.
результат = строка 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.
Операторы сравнения чисел и строк, ссылок на объекты (Is) и строк по шаблону (Like), использующиеся в VBA Excel. Их особенности, примеры вычислений.
Операторы сравнения чисел и строк
Операторы сравнения чисел и строк представлены операторами, состоящими из одного или двух математических знаков равенства и неравенства:
- < – меньше;
- <= – меньше или равно;
- > – больше;
- >= – больше или равно;
- = – равно;
- <> – не равно.
Синтаксис:
Результат = Выражение1 Оператор Выражение2 |
- Результат – любая числовая переменная;
- Выражение – выражение, возвращающее число или строку;
- Оператор – любой оператор сравнения чисел и строк.
Если переменная Результат будет объявлена как Boolean (или Variant), она будет возвращать значения False и True. Числовые переменные других типов будут возвращать значения 0 (False) и -1 (True).
Операторы сравнения чисел и строк работают с двумя числами или двумя строками. При сравнении числа со строкой или строки с числом, VBA Excel сгенерирует ошибку Type Mismatch (несоответствие типов данных):
Sub Primer1() On Error GoTo Instr Dim myRes As Boolean ‘Сравниваем строку с числом myRes = «пять» > 3 Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If End Sub |
Сравнение строк начинается с их первых символов. Если они оказываются равны, сравниваются следующие символы. И так до тех пор, пока символы не окажутся разными или одна или обе строки не закончатся.
Значения буквенных символов увеличиваются в алфавитном порядке, причем сначала идут все заглавные (прописные) буквы, затем строчные. Если необходимо сравнить длины строк, используйте функцию Len.
myRes = «семь» > «восемь» ‘myRes = True myRes = «Семь» > «восемь» ‘myRes = False myRes = Len(«семь») > Len(«восемь») ‘myRes = False |
Оператор Is – сравнение ссылок на объекты
Оператор Is предназначен для сравнения двух переменных со ссылками на объекты.
Синтаксис:
Результат = Объект1 Is Объект2 |
- Результат – любая числовая переменная;
- Объект – переменная со ссылкой на любой объект.
Если обе переменные Объект1 и Объект2 ссылаются на один и тот же объект, Результат примет значение True. В противном случае результатом будет False.
Set myObj1 = ThisWorkbook Set myObj2 = Sheets(1) Set myObj3 = myObj1 Set myObj4 = Sheets(1) myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True myRes = myObj2 Is myObj4 ‘myRes = True |
По-другому ведут себя ссылки на диапазоны ячеек. При присвоении ссылок на один и тот же диапазон нескольким переменным, в памяти создаются уникальные записи для каждой переменной.
Set myObj1 = Range(«A1:D4») Set myObj2 = Range(«A1:D4») Set myObj3 = myObj1 myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True |
Оператор Like – сравнение строк по шаблону
Оператор Like предназначен для сравнения одной строки с другой по шаблону.
Синтаксис:
Результат = Выражение Like Шаблон |
- Результат – любая числовая переменная;
- Выражение – любое выражение, возвращающее строку;
- Шаблон – любое строковое выражение, которое может содержать знаки подстановки.
Строка, возвращенная аргументом Выражение, сравнивается со строкой, возвращенной аргументом Шаблон. Если обе строки совпадают, переменной Результат присваивается значение True, иначе – False.
myRes = «восемь» Like «семь» ‘myRes = False myRes = «восемь» Like «*семь» ‘myRes = True myRes = «Куда идет король» Like «идет» ‘myRes = False myRes = «Куда идет король» Like «*идет*» ‘myRes = True |
Со знаками подстановки для оператора Like вы можете ознакомиться в статье Знаки подстановки для шаблонов.
Содержание
- Использование оператора Like для сравнения двух строк
- Использование оператора Like с различными шаблонами сопоставления
В VBA вы можете сравнить две строки, используя Нравиться оператор для проверки соответствия строк. В этом руководстве вы узнаете, как использовать этот оператор с различными шаблонами.
Если вы хотите узнать, как сравнивать строки в VBA, щелкните здесь: VBA Compare Strings — StrComp
Если вы хотите узнать, как использовать операторы сравнения, щелкните здесь: Операторы сравнения VBA — не равно и др.
С помощью оператора Like мы можем проверить, начинается ли строка с определенного текста, включает ли его и т. Д. По умолчанию Нравиться Оператор сравнивает символы с помощью двоичного метода. Это означает, что оператор чувствителен к регистру. Если вы хотите сделать регистр нечувствительным, вам нужно поставить Вариант Сравнить текст в верхней части вашего модуля. Используя этот метод, Нравиться оператор считает «S» и «s» одними и теми же символами. В наших примерах мы будем использовать сравнение по умолчанию с учетом регистра.
Если соответствие существует, Нравиться Оператор возвращает True в результате или False в противном случае.
Сначала мы рассмотрим простой пример, в котором мы хотим проверить, начинается ли наша строковая переменная с Мистер. Для этого нужно поставить звездочку (*) в конце совпадающего текста (Мистер*). Вот код:
1234567891011121314 | Sub LikeDemo ()Dim strName As StringDim blnResult As BooleanstrName = «Мистер Майкл Джеймс»Если strName Like «Mr *» ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, еслиКонец подписки |
В этом примере мы хотим проверить, есть ли строка strName начинается с Мистер и верните True или False в переменной blnResult.
Сначала мы устанавливаем значение strName к Г-н Майкл Джеймс:
1 | strName = «Мистер Майкл Джеймс» |
Затем мы используем Нравиться оператор в операторе If:
12345 | Если strName Like «Mr *» ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, если |
Как strName начинается с Мистер, то blnResult возвращает True:
Изображение 1. Использование оператора Like, чтобы проверить, начинается ли строка с определенных символов.
Использование оператора Like с различными шаблонами сопоставления
Оператор Like может проверять соответствие двух строк на основе разных шаблонов. Вот список возможных подходящих шаблонов:
Код шаблона |
Тип соответствия |
* |
Соответствует 0 или более символов |
? |
Соответствует одиночному символу |
# |
Соответствует одной цифре |
[символы] |
Соответствует одиночному символу из списка символов |
[А-Я] |
Соответствует любому заглавному символу алфавита |
[A-Za-z] |
Соответствует любому символу алфавита |
[! символы] |
Соответствует одиночному символу, исключая список символов |
Теперь мы можем увидеть, как использовать эти шаблоны в коде. Вот пример нескольких шаблонов:
Соответствие одиночному символу:
1234567 | strText1 = «ABCDE»Если strText1 Как «AB? DE» ТогдаblnResult1 = ИстинаЕщеblnResult1 = ЛожьКонец, если |
Соответствие одной цифры:
1234567 | strText2 = «AB7DE»Если strText2 Как «AB # DE» ТогдаblnResult2 = ИстинаЕщеblnResult2 = ЛожьКонец, если |
Соответствие любому заглавному символу алфавита:
1234567 | strText3 = «ABCDE»Если strText3 Как «AB [A-Z] DE» ТогдаblnResult3 = TrueЕщеblnResult3 = ЛожьКонец, если |
Не соответствует ни одному прописному символу алфавита:
1234567 | strText4 = «AB7DE»Если strText4 Как «AB [! A-Z] DE» ТогдаblnResult4 = ИстинаЕщеblnResult4 = ЛожьКонец, если |
Соответствие любому символу алфавита (в верхнем или нижнем регистре):
1234567 | strText5 = «ABcDE»Если strText5 Как «AB [A-Za-z] DE» ТогдаblnResult5 = ИстинаЕщеblnResult5 = ЛожьКонец, если |
Когда вы выполните код, вы увидите, что Нравиться оператор возвращает True в blnResult переменные для каждого сравнения:
Изображение 2. Использование оператора Like с разными шаблонами сопоставления