За допомогою операторів порівняння визначають чи рівні значення у виразі і як вони відрізняються якщо не рівні.
Результатом виконання будь-якого оператора порівняння є значення типу 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.
