Like vba excel регистр

 

Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало.  
Я нашел такой варинат, но только при точном совпадении регистра получается:  
If ActiveCell Like «*Текст*» Then…  
Как по другому написать условие, чтобы игнорировать регистр?

 

{quote}{login=Сергей}{date=17.05.2008 02:17}{thema=Как избежать проверки регистра при использовании Like?}{post}Подскажите пожалуйста, мне нужно удалять строку по условию, если она содержит слово, например, Текст, но если будет в верхнем регистре ТЕКСТ, чтобы тоже сработало.  
Я нашел такой варинат, но только при точном совпадении регистра получается:  
If ActiveCell Like «*Текст*» Then…  
Как по другому написать условие, чтобы игнорировать регистр?{/post}{/quote}  
If UCase(ActiveCell) Like «*ТЕКСТ*» Then MsgBox «Совпало»

 

Я контролирую окончание цикла по одному столбцу, а условие проверяю по другому. И так не срабатывает. Ошибку выдает.  

  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}  
У Вас ошибка в использовании скобки.  

  Правильнее так:  
If UCase(ActiveCell.Offset(0, 1)) Like «*ТЕКСТ*» Then  

  Для проверки, например, 10-ти ячеек справа от активной:  

  Sub MyTest()  
Dim x, i  
Set x = ActiveCell  
For i = 1 To 10  
If UCase(x.Offset(0, i)) Like «*ТЕКСТ*» Then  
‘ Что-то сделать  
End If  
Next  
End Sub  

  Вместо Like иногда удобнее InStr():  
If InStr(1, ActiveCell, «Текст», vbTextCompare) > 0 Then …

 

Спасибо. Только у меня возникла сложность. Я использую  
Do While Not IsEmpty(ActiveCell)  
для проверки окончания пробежки по строкам и уже по каждой строчке мне нужно контролировать диапазон ячеек правее на вхождение этого текста. А что запустит Ваш Sub внутри моего первого цикла?

 

Если нужно просто узнать, есть ли фрагмент текста в 10 ячейках правее активной, то можно еще и так (не зависит от регистра):  

  ‘ True, если найдено похожее на What в диапазоне Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function  

  Sub Test()  
With ActiveCell  
MsgBox IsFound(«ТЕКСТ», Range(.Offset(0, 1), .Offset(0, 10)))  
End With  
End Sub

 

{quote}{login=Сергей}{date=17.05.2008 04:20}{thema=}{post}Спасибо. Только у меня возникла сложность. Я использую  
Do While Not IsEmpty(ActiveCell)  
для проверки окончания пробежки по строкам и уже по каждой строчке мне нужно контролировать диапазон ячеек правее на вхождение этого текста. А что запустит Ваш Sub внутри моего первого цикла?{/post}{/quote}  
Лучше приложите код, а лучше XLS с кодом, я подправлю — так быстрее будет. Или напишите полностью, что нужно сделать, а то по чайной ложке на ночь… усну вдруг :)  
Мне же не видно как организован цикл, кто там перемещает активную ячейку и т.п.

 

Sub Поиск_ТЕКСТ()  
   Sheets(«Лист2»).Select  
   Range(«A1»).Select  
   Do While Not IsEmpty(ActiveCell)  
   ActiveCell.Offset(0, 1) Like «*ТЕКСТ*» Then  
   Selection.EntireRow.Hidden = True  
   End If  
   ActiveCell.Offset(1, 0).Select  
   Loop  
End Sub  
Хотелось бы проверять не только по одной ячейке справа но и по диапазону, скажем до 10-ой ячейки в текущей строке.

 

Sub Поиск_ТЕКСТ()  
Dim x  
Application.ScreenUpdating = False  
Set x = Sheets(«Лист2»).[A1]
Do While Not IsEmpty(x)  
With x  
If IsFound(«Текст», Range(.Offset(0, 1), .Offset(0, 10))) Then  
.EntireRow.Hidden = True  
End If  
End With  
Set x = x.Offset(1, 0)  
Loop  
Application.ScreenUpdating = True  
End Sub  

  ‘ Вспомогательная функция поиска What в Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function

 
 

{quote}{login=Сергей}{date=17.05.2008 05:04}{thema=}{post}Наше народное Гран Мэрси{/post}{/quote}  
Toujours s’il vous plaоt!

 

А как приспособить вместо строки со скрытием  
EntireRow.Hidden = True  
удаление этой строки. Что у меня с delete Не получается.  
Подскажите пожалуйста

 

{quote}{login=Сергей}{date=17.05.2008 11:24}{thema=}{post}А как приспособить вместо строки со скрытием  
EntireRow.Hidden = True  
удаление этой строки. Что у меня с delete Не получается.  
Подскажите пожалуйста{/post}{/quote}  
Sub Поиск_ТЕКСТ()  
Dim i  
Application.ScreenUpdating = False  
i = 1  
Do While Not IsEmpty(Cells(i, 1))  
With Cells(i, 1)  
If IsFound(«Текст», Range(.Offset(0, 1), .Offset(0, 10))) Then  
.EntireRow.Delete  
Else  
i = i + 1  
End If  
End With  
Loop  
Application.ScreenUpdating = True  
End Sub  

  ‘ Вспомогательная функция поиска What в Where  
Function IsFound(What, Where) As Boolean  
IsFound = Not Where.Find(What, LookIn:=xlValues, LookAt:=xlPart) Is Nothing  
End Function

 

Guest

Гость

#14

17.05.2008 19:31:55

Спасибо за двоих!!!

Цитата
Сообщение от Olya1985
Посмотреть сообщение

да, но мой код с учебной целью, как пример оператора go to при возникновении ошибки. А насчет регистра не подскажете?

Есть ещё несколько и приёмов игнорирования регистра букв.

Самый тупой

Visual Basic
1
Option Compare Text

вверху окна с программой. Действует на весь модуль.

Также есть параметр vbTextCompare функции

StrComp (дающей 0, когда строки равны):

Visual Basic
1
If StrComp(Trim(UserName), "Howard", vbTextCompare) Then GoTo WrongName

Действует только в данной строке, независимо от Option Compare вверху модуля.

Ну и, на закуску, мой любимый Like:

Visual Basic
1
If Not UserName Like "Howard" Then GoTo WrongName

(иными словами, «если введённое имя не Howard — перейти к метке WrongName»).

В этом случае, если не включён Option Compare Text (а по умолчанию сравнение точное: Option Compare Binary), то приходится извращаться:

Visual Basic
1
If Not UserName Like "[HhНн]oward" Then GoTo WrongName

А по-хорошему, в инпутбоксе дожна адекватно работать и кнопка Cancel, посему так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub GoToDemo()
UserName = Trim(InputBox("Enter Your Name:"))  'Trim обрезает внешние побелы
 
If UserName = vbNullString Then
    Exit Sub
ElseIf UserName Like "[Hh][Oo][Ww][Aa][Rr][Dd]" Then 'всё okay, никуда не go
    MsgBox ("Welcome " & UserName & "...")
Else
    GoTo WrongName
End If
 
WrongName: MsgBox "Sorry. " & UserName & " can’t run this macro."
End Sub

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

результат = строка 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 с разными шаблонами сопоставления

Вы поможете развитию сайта, поделившись страницей с друзьями

Like this post? Please share to your friends:
  • Like the word waitress
  • Lexical aspects of the word
  • Like for a word that describes you
  • Lexical aspect of the word
  • Like for a one word description