С помощью операторов сравнения определяют равны ли значения в выражении и как они отличаются если не равны.
Результатом выполнения любого оператора сравнения является значение типа Boolean – True (Истина), или False (Ложь).
Операторы сравнения VBA
| Оператор | Название | Синтаксис | Описание |
| = | Равно | a = b | Если а равно b тогда True. Иначе – False. |
| > | Больше | a > b | Если a больше b тогда True. Иначе – False. |
| < | Меньше | a < b | Если a меньше b тогда True. Иначе – False. |
| >= | Больше или равно | a >= b | Если a больше или равно b тогда True. Иначе – False. |
| <= | Меньше или равно | a <= b | Если a меньше или равно b тогда True. Иначе – False. |
| <> | Не равно | a <> b | Если a не равно b тогда True. Иначе – False. |
| Is | Сравнение двух операндов, содержащих ссылки на объекты | obj1 Is obj2 | Если оба выражения типа Object ссылаются на один и тот же объект, тогда True. Иначе – False. |
| IsNot | Сравнение двух ссылочных переменные объекта | obj1 IsNot obj2 | IsNot является противоположностью оператора Is. |
| Like | Сравнение двух строковых выражений | ryadok1 Like rydok2 | Используется для сравнения строковых выражений по заданному шаблону. |
Примечание.
Обратите внимание на то, что знак равенства (=) в языке программирования VBA используется в двух разных случаях. Этот знак используют для присваивания значений переменной (в объявлении) и для определения одинаковы значения, или нет (в операциях сравнения).
Что нужно знать о сравнении в VBA
Если в выражении сравнения оба операнда имеют один и тот же тип данных, то будет выполнено простое сравнение для этого типа.
Если в выражении сравнения один, или оба операнда являются переменными типа Variant, то компилятор попытается преобразовать тип Variant в какой-нибудь из совместимых типов данных для выполнения сравнения. Если же это не получится, то на экран будет выведено сообщение об ошибке времени выполнения.
Если в выражении сравнения оба операнда имеют определенные типы и эти типы не совместимы между собой, то компилятор выведет на экран сообщение об ошибке несовпадения типов.
Сравнение строк в VBA
Операторы сравнения можно использовать как для числовых, так и для строковых значений.
При сравнении строк в VBA, компилятор последовательно сравнивает каждый символ слева направо. Старшинство символов определяется в соответствии с алфавитным порядком (для букв), и в соответствии с двоичным значением кода ASCII (для любых других символов).
Если обе строки имеют одинаковую длину, содержат одинаковые символы и эти символы расположены в одинаковом порядке, то такие строки являются равными. То есть результат их сравнения будет True. В любом другом случае, результат сравнения строк будет False.
Пример
Sub myCode()
a = "myText" = "myText"
MsgBox (a)
End Sub
В данном примере, результат будет True, поскольку строки полностью идентичны.
Пример
Sub myCode()
a = "myText" = "mytext"
MsgBox (a)
End Sub
В данном примере, результат будет False, потому что, когда компилятор начнёт сравнение, он начнёт поочерёдно сравнивать каждую букву двух строк (слева направо). И когда придёт очередь сравнивать третью букву обоих строк, то будет обнаружено что в первой строке буква T большая, а во второй – t маленькая.
Символы различных регистров в VBA можно сравнивать двумя способами:
- Сравнение строк в двоичном формате. Этот метод используется по умолчанию. При его использовании, для анализа используется двоичный эквивалент каждого символа. Буквы нижнего регистра имеют больший двоичный код, чем буквы верхнего регистра. Например, в выражении "b" > "B" результат будет True, потому что двоичный код символа маленькой буквы b (символа нижнего регистра) больше чем двоичный код символа большой буквы B (символа верхнего регистра).
- Сравнение строк в текстовом режиме. Этот метод предполагает сравнение по алфавиту без учёта регистра букв. При таком способе сравнения, строка "MYTEXT" будет равна строке "mytext".
Для того, чтобы установить текстовый режим сравнения строк для определённого модуля, нужно в самом начале этого модуля, перед процедурами и переменными, поместить оператор Option Compare Text.
Пример сравнения строк в текстовом режиме
Option Compare Text
Sub myCode()
a = "MyText" = "mytext"
MsgBox (a)
End Sub
Сравнение одной строки с другой по шаблону: Оператор Like
Оператор Like сравнивает строку с заданным шаблоном. Он возвращает значение True, если при сравнении двух строк, в строке 1 найдено слово, или фраза, соответствующие заданному шаблону.
Синтаксис оператора Like
ryadok1 Like ryadok2
Здесь,
- ryadok1 – это сравниваемая строка (любое строковое выражение). В этой строке выполняется поиск;
- ryadok2 – комбинация специальных символов, которая определяет шаблон для сравнения.
Специальные символы шаблона для оператора Like
| Символ | Соответствие |
| ? | Соответствует любому одному (отдельному) символу. |
| * | Соответствует любому количеству символов в любой комбинации (0 и более символов). |
| # | Соответствует любой одной цифре от 0 до 9. |
| (List) | List – это список определённых символов. Для обозначения диапазона используется знак дефиса (-). Соответствует совпадению с любым одиночным символом в списке. |
| (!List) | Соответствует любому символу, не входящему в список (List). |
Примечание.
При использовании оператора Like, сравнение прописных и строчных букв зависит от установленного режима Option Compare. По умолчанию, сравнение происходит в двоичном формате и оператор Like различает буквы верхнего и нижнего регистра. А для того, чтобы оператор Like не реагировал на значение регистров, нужно установить режим Option Compare (перейти в текстовый режим сравнения строк).
Пример сравнивания строки с заданным шаблоном
a = "вісім" Like "сім" 'результат False
a = "вісім" Like "*сім" 'результат True
a = "Слава Україні!" Like "Слава" 'результат False
a = "Слава Україні!" Like "Слава*" 'результат True
a = "Доброго вечора, ми з України!" Like "ми" 'результат False
a = "Доброго вечора, ми з України!" Like "*ми*" 'результат True
Сравнение ссылок на объекты: Оператор Is
Оператор Is используют для сравнения переменных, содержащих ссылки на объекты.
Если обе переменные типа Object ссылаются на один и тот же объект, тогда результат будет True. В любом другом случае, результат будет False.
Пример 1
Set myObj1 = ThisWorkbook
Set myObj2 = Sheets(1)
Set myObj3 = myObj1
Set myObj4 = Sheets(1)
a = myObj1 Is myObj2 'результат False
a = myObj1 Is myObj3 'результат True
a = myObj2 Is myObj4 'результат True
Пример 2
Set myObj1 = Range("A1")
Set myObj2 = Range("A1")
Set myObj3 = myObj1
a = myObj1 Is myObj2 'результат False
a = myObj1 Is myObj3 'результат True
Важно знать!
При сравнении ссылок на ячейки (или на диапазон ячеек) нужно учитывать тот факт, что при присвоении ссылок переменной в памяти создаются уникальные записи для каждой переменной. Поэтому во втором примере мы получаем результат False, когда сравниваем переменные myObj1 и myObj2.
