Vba оператори порівняння. Оператори VBA. Пріоритети виконання операцій при обчисленні складних виразів

Тут докладно описані всі арифметичні оператори, оператори порівняння, логічні та оператори конкатенації. Я спробував зібрати все те, що потрібно знати про цих операторів. Кожен оператор має приклад. Описи перекладені мною зі стандартного Help a VB5.

Арифметичні оператори

оператор ^ (зведення у ступінь)

Цей оператор призначений для зведення числа у ступінь.

Синтаксис:

результат = число^ступінь

Параметри:

результат
число
ступінь- обов'язкова; будь-яке числове вираз

Зауваження:

числоможе бути негативне, тільки в тому випадку, коли ступінь- ціле число. Якщо одному вираженні використовується кілька операторів ^, то обчислення відбувається зліва направо. Зазвичай тип результату – Double. Однак, якщо або ступінь, або число- Null вираз, то результаттеж Null.

Приклад:

Dim MyValue
MyValue = 2^2" Поверне 4.
MyValue = 2^3^3" Поверне 512 (2^3=8, 8^3=512)
MyValue = (-5) ^ 3 " Поверне -125.

Поради:

Якщо вам необхідно звести число в постійний ступінь, то краще використовувати кілька операторів – множень, ніж один – зведення в степер, судіть самі, цикл у мільйон проходів з обчисленням виразу проходив:

test1 = 2 ^ 8 " 893мс
test1 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 " 130мс!

оператор * (множення)

Використовується для перемноження двох чисел.

Синтаксис:

результат = число1* число2

Параметри:

результат- обов'язковий; будь-яка числова змінна
число1- Обов'язково; будь-яке числове вираз
число2- Обов'язково; будь-яке числове вираз

Зауваження:

Тип даних результату зазвичай такий самий, як і найточніший тип із двох чисел. Порядок точності, від більшого до меншого - Byte, Integer, Long, Single, Currency, Double, Decimal. Щоправда, є винятки:

  • Якщо перемножуються Single та Long, то результат - Double
  • Якщо тип даних результату- Long Single або Date, в який не міститься сам результат виразу, то результат конвертується у Variant, що містить Double.

Якщо число1або число2

Порядок точності в множення відмінний від тих, що використовуються в додаванні та відніманні.

Приклад:

Dim MyValue
MyValue = 2*2” Поверне 4.
MyValue = 459.35 * MyValue "(!LANG: Поверне 495.35*4

оператор / (поділ)

Використовується для поділу двох чисел і отримати результат із плаваючою точкою.

Синтаксис:

результат = число1 / число2

Параметри:

результат- обов'язковий; будь-яка числова змінна
число1- Обов'язково; будь-яке числове вираз
число2- Обов'язково; будь-яке числове вираз

Зауваження:

Результатзазвичай має тип Double. Щоправда, є винятки:

  • Якщо обидва вирази мають тип Byte, Integer, Single, то результат Single. Проте, якщо розміри виразу не вписуються у рамки Single, відбувається помилка.
  • Якщо обидва вирази мають тип Variant, що містить Byte, Integer або Single, то результат Single Variant. Однак, якщо розміри виразу не вписуються в рамки Single, Double Variant.
  • Якщо одне з чисел має тип Decimal, то результат - Decimal.

Якщо число1або число2- Null, воно інтерпретується просто як звичайний 0.

Приклади:

Dim MyValue
MyValue = 10/4" !} Поверне 2.5.
MyValue = 10/3" Поверне 3.333333.

оператор \ (цілочисленне поділ)

Використовується для поділу двох чисел та отримати цілий результат.

Синтаксис:

результат = число1 \ число2

Параметри:

результат- обов'язковий; будь-яка числова змінна
число1- Обов'язково; будь-яке числове вираз
число2- Обов'язково; будь-яке числове вираз

Зауваження:

Перед тим, як відбувається такий поділ, вирази округляються до Byte, Integer або Long виразів. Зазвичай тип даних результату Byte, Byte variant, Integer, Integer variant, Long, or Long variant. Будь-яка частина обрізається.

Однак, якщо будь-який вираз Null, то і результат Null. Будь-який вираз, що містить Empty інтерпретується як 0.

Приклади:

Dim MyValue
MyValue = 11\4" Поверне 2.
MyValue = 9\3" Поверне 3.
MyValue = 100\3" Поверне 33.

оператор Mod (залишок від розподілу)

Використовується для розподілу двох чисел та отримання залишку від їхнього розподілу.

Синтаксис:

результат = число1 Mod число2

Параметри:

результат- обов'язковий; будь-яка числова змінна
число1- Обов'язково; будь-яке числове вираз
число2- Обов'язково; будь-яке числове вираз

Зауваження:

При розподілі числа із правлячою точкою округляються. Наприклад, результат наступного виразу дорівнює 5:

A = 19 Mod 6.7

Що тут відбувається? Спочатку округляється число 6.7 до 7. Потім відбувається розподіл, отримуємо 2.7. Залишок від розподілу = 5. (2 * 7 = 14, 19 - 14 = 5).

Результат зазвичай має тип Byte, Byte variant, Integer, Integer variant, Long, або Variant, що містить Long.

Якщо будь-яке з виразів Null, то результат Null. Будь-який вираз, що містить Empty інтерпретується як 0.

Приклади:

Dim MyResult
MyResult = 10 Mod 5 " Поверне 0.
MyResult = 10 Mod 3 " Поверне 1.
MyResult = 12 Mod 4.3 " Поверне 0.
MyResult = 12.6 Mod 5" Поверне 3.

оператор + (додавання)

Використовується для додавання двох чисел.

Синтаксис:

результат = вираз1+вираз2

Параметри:

результат- обов'язковий; будь-яка числова змінна
вираз1
вираз2- Обов'язково; будь-який вираз

Зауваження:

Коли ви використовуєте оператор +, ви не можете визначити, що відбудеться, додавання або конкатенація рядків. Для конкатенації використовуйте оператор &, щоб уникнути непорозумінь та зробити код більш читати.

Якщо один із виразів не Variant, то застосовуються такі правила:

  • Якщо обидва вирази мають чисельний тип (Byte, Boolean, Integer, Long, Single, Double, Date, Currency, або Decimal) – то відбувається їхнє складання.
  • Якщо обидва вирази рядка – конкатенація.
  • Якщо один з виразів має чисельний тип, а інше будь-яке значення Variant, включаючи Null, то відбувається додавання.
  • Якщо одне з виразів рядок, а інше будь-яке значення Variant, то відбувається конкатенація.
  • Якщо один із виразів містить Empty, то повертається друге, не змінене вираз.
  • Якщо один з виразів має чисельний тип, а інший рядок, відбувається помилка розбіжності типів (Type mismatch).
  • Якщо будь-яке вираз Null - тоді результат теж Null.

Якщо обидва вирази Variant, то застосовуються такі правила:

  • Якщо обидва вирази числа - вони складаються.
  • Якщо обидва вирази рядка – то вони конкатенуються.
  • Якщо один із виразів число, а інший рядок - відбувається додавання.

Для звичайного складання тип даних результату зазвичай такий самий, як і найточніший тип із двох чисел. Порядок точності наступний - Byte, Integer, Long, Single, Double, Currency, та Decimal. Є винятки:

  • Якщо складаються Single та Long, то результат - Double
  • Якщо складаються вираз із типом Date, з будь-яким іншим виразом, то результат – Date.

Якщо один або обидва вирази Null, то результат теж Null. Якщо обидва вирази містять Empty, результат Integer. Якщо тільки одне, то як результат повертається не змінений другий вираз.

Приклади:

Dim MyNumber, Var1, Var2
MyNumber = 2 + 2" Поверне 4.
MyNumber = 4257.04 + 98112" Поверне 102369.04.

Var1 = "34"
Var2 = 6 Ініціалізуємо змішані змінні
MyNumber = Var1 + Var2 " Поверне 40.

Var1 = "34"
Var2 = "6" Ініціалізуємо змінні з рядками
MyNumber = Var1 + Var2 " Поверне"346" (відбулася
"Конкатенація, а не додавання!).

Поради:

Оператор складання (+) можна використовуватиме складання дат, тобто. змінних типу Date:

Dim d As Date
d = DateSerial (2002, 8, 15) ініалізація дати 15.08.2002
d = d + 15 Тепер d містить дату 30.08.2002
тобто ми додали 15 днів

оператор - (віднімання, зміна знака)

Використовується для знаходження різниці між двома числами, або також для зміни знака виразу.

Синтаксис:

результат = вираз1- вираз2

-Вираз

Параметри:

результат- обов'язковий; будь-яка числова змінна
вираз- Обов'язково; будь-який вираз
вираз1- Обов'язково; будь-який вираз
вираз2- Обов'язково; будь-який вираз

Зауваження:

У першому синтаксисі оператор "-" необхідний для знаходження різниці між двома числами. У другому синтаксисі, "-" використовується для зміни знака у вирази.

Тип даних результату зазвичай такий самий, як і найточніший тип із двох чисел. Порядок точності наступний - Byte, Integer, Long, Single, Double, Currency, та Decimal. Є винятки:

  • Якщо у відніманні беруть участь типи Single і Long, то результат - Double
  • Якщо у відніманні використовується вираз із типом Date,
    то результат – Date.
  • Віднімання двох дат, дає в результаті Double.

Якщо один або обидва вирази Null, то результат теж Null. Якщо одне з виразів Empty, воно інтерпретується як 0.

Порядок точності у додаванні та відніманні відмінний від тих, що використовуються в множенні.

Приклади:

Dim MyResult
MyResult = 4 - 2" Поверне 2.
MyResult = 459.35 - 334.90" Поверне 124.45.

Поради:

Як і оператор додавання, оператор віднімання може бути застосований для обчислення різниці (щодня) між двома датами:

Dim d1 As Date
Dim d2 As Date
Dim razn As Long
d1 = DateSerial (1983, 10, 14)
d2 = DateSerial (2002, 8, 15)
razn = d2 - d1 Різниця в днях (6880).

Оператори порівняння

Використовуються для порівняння деяких виразів. Мають 3 синтаксиси:

Синтаксис:

результат = вираз1 оператор порівняння вираз2
результат = об'єкт1 Is объект2
результат = рядок Like зразок

Параметри:

результатобов'язковий; будь-яка чисельна змінна
виразобов'язково; будь-яке вираження
оператор порівнянняобов'язковий; будь-який оператор порівняння
об'єктобов'язковий; ім'я будь-якого об'єкта
рядокобов'язкова; будь-яке рядкове вираження.
зразокобов'язковий; будь-який рядковий вираз, або діапазон літер та цифр

Зауваження:

Наступна таблиця містить список операторів порівняння та умови, за якими визначається результат виразу (True або False).

Оператор

True, якщо

False, якщо

Null, якщо

< (меньше чем) вираз1 <
вираз2
вираз1 >=
вираз2

одне
з
виразів містить Null

<= (меньше или равно) вираз1 <=
вираз2
вираз1 >
вираз2
> (більше ніж) вираз1 >
вираз2
вираз1 <=
вираз2
>= (більше чи одно) вираз1 >=
вираз2
вираз1 <
вираз2
= (Рівно) вираз1 =
вираз2
вираз1 <>
вираз2
<>(не дорівнює) вираз1 <>
вираз2
вираз1 =
вираз2

Оператори Is та Like виконують специфічні функції, і їхня таблиця порівняння відрізняється від наведеної (їх ми розглянемо нижче).

Коли порівнюються два вирази, не завжди можна визначити, що порівнюватиметься, числа або рядки. Нижче показано, як буде обчислюватися результат, якщо обидва вирази мають тип, відмінний від Variant:

  • Якщо обидва вирази числа (Byte, Boolean, Integer, Long, Single, Double, Date, Currency, або Decimal), відбувається порівняння чисел.
  • Якщо обидва вирази рядка, відбувається порівняння рядків. (менший рядок та, перша та наступні літери якої маю менший ascii код).
  • Якщо один із виразів число, а інше Variant, який може бути трактований як число, відбувається порівняння чисел.
  • Якщо один з виразів число, а інше Variant рядок, який не може бути трактований як число, відбувається помилка (Type mismatch).
  • Якщо один з виразів рядок, а інше будь-яке значення Variant (навіть Null), то відбувається рядкове порівняння.
  • Якщо один із виразів Empty, а інше число, то відбувається порівняння чисел, де Empty розглядається як 0.
  • Якщо один з виразів Empty, а інший рядок, то порівняння рядків, де Empty розглядається як порожній рядок "".

Якщо перше вираз і друге мають тип Variant, то вирази порівнюються, згідно з тими типами даних, які містить Variant:

  • Якщо обидва Variant вирази містять числа, відбувається порівняння чисел.
  • Якщо обидва Variant вирази містять рядки, відбувається порівняння рядків.
  • Якщо один з Variant виразів містить число, а інше рядок, то числове вираз менше рядкового.
  • Якщо одне з Variant виразів Empty, а інше число, Empty розглядається як 0.
  • Якщо один з варіантів виразів Empty, а інший рядок, то Empty розглядається як порожній рядок "".
  • Якщо обидва вирази Empty, вони розглядаються як рівні.

Коли Single змінна порівнюється з Double, Double округляється до точності Single.

Якщо Currency порівнюється з Single або Double, Single або Double конвертуються в Currency. Так само, при порівнянні Decimal з Single або Double, Single або Double конвертуються в Decimal. Для Currency будь-яка частина менша, ніж.0001, може бути втрачена. Для Decimal це значення 1E-28 або може статися помилка. Таким чином, при втраті дробової частини, вирази можуть інтерпретуватися як рівні, хоча насправді одне від одного буде відрізнятися. (Хоч і на маленьке значення).

Приклади:

Dim MyResult, Var1, Var2
MyResult = (45< 35) " Поверне False.
MyResult = (45 = 45) " Поверне True.
MyResult = (4<> 3) " Поверне True.
MyResult = ("5" > "4") " Поверне True.

Var1 = "5": Var2 = 4 в VB можна використовувати двокрапку,
для поділу операторів.

MyResult = (Var1 > Var2) " Поверне True.

Var1 = 5: Var2 = Empty
MyResult = (Var1 > Var2) " Поверне True.

Var1 = 0: Var2 = Empty
MyResult = (Var1 = Var2) " Поверне True.

оператор порівняння Is

Цей оператор використовується для порівняння об'єктних змінних.

Синтаксис цього оператора наведено вище.

Зауваження:

Якщо объект1 і объект1 посилаються однією і той самий об'єкт, то результат - True, якщо ні, то False. Дві змінні можуть посилатися на той самий об'єкт декількома шляхами. У наступному прикладі A посилається на той же об'єкт, що і B:

Set A = B

Наступний приклад робить так, що змінні A і B посилаються на той самий об'єкт - C:

Set A = C
Set B = C

Приклади:

Dim MyObject, YourObject, ThisObject, _
OtherObject, ThatObject, MyCheck

Set YourObject = MyObject створюємо посилання на об'єкти
Set ThisObject = MyObject
Set ThatObject = OtherObject
MyCheck = YourObject Is ThisObject Поверне True.
MyCheck = ThatObject Is ThisObject Поверне False.
Припускаємо, що MyObject<>OtherObject
MyCheck = MyObject Is ThatObject Поверне False.

оператор порівняння рядків - Like

Оператор порівняння рядків Like використовується для порівняння рядків.

Синтаксис цього оператора вже розглянуто вище.

Зауваження:

Цей оператор можна використовувати для перевірки рядка String на маску Pattern. Це дуже потужний оператор, майже аналог регулярних виразіву Perl.

Отже, працює цей перетор в такий спосіб. Якщо рядок підходить під маску, результат True. Якщо ні – False. Якщо один із виразів Null - результат теж Null.

Поведінка оператора Like залежить від стандартного типу порівняння рядків. (Оператор Option Compare).

Якщо встановлено тип Binary (тобто двійкове порівняння), то рядки порівнюються відповідно до їх Ascii кодів (у різних кодуваннях вона різна). Зазвичай використовується така послідовність:

A< B < E < Z < a < b < e < z < А < К < Я < а < к < я

Якщо встановлено тип Text (текстове порівняння). За такого порівняння послідовність відрізняється від попередньої, тут великі та маленькі літери - рівні:

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

Найголовніша функція оператора Like - це перевірка на належність рядка будь-якої маски. У масці можна використовувати такі спец. символи:

Будь-який окремий символ
* Нулі або більше символів
# Будь-яка цифра (0-9).
Будь-який окремий символ, який потрапляє до списку charlist
[!charlist] Будь-який окремий символ, що не потрапляє до списку charlist

Тут невелике зауваження. Для того щоб перевірити належність рядка на масці, що містить спец. симоли (тобто. перевірити, наприклад, чи є рядку симоли [,?,#,],*), необхідно укласти з квадратні дужки . Просто так ставити окрему дужку [або], не можна.

Якщо вказати список символів, можна використовувати тире (–). Наприклад, щоб встановити послідовність від A до Z, потрібно використовувати маску . Все, що знаходиться в дужках не повинно містити ніяких роздільників (пробелів, ком і т.д.), інакше вони теж будуть включені в послідовність.

Є й інші важливі правила під час перевірки маски:

  • (!) Знак на початку списку символів говорить про те, що потрібно шукати символи, які не входять до списку. Якщо вам необхідно знайти сам знак!, потрібно поставити дужки [!].
  • (–) використовується для визначення діапазону символів.
  • Коли задається діапазон символів, він повинен бути зростаючим за ASCII кодами. Тобто. правильна маска, а ні.
  • Послідовність інтерпретується як порожній рядок "".

Приклади:

Dim MyCheck
MyCheck = "aBBBa" Like "a*a" " Поверне True.
MyCheck = "F" Like "" " Поверне True.
MyCheck = "F" Like "[!A-Z]" " Поверне False.
MyCheck = "a2a" Like "a#a" " Поверне True.
MyCheck = "aM5b" Like "a#[!c-e]" " Поверне True.
MyCheck = "BAT123khg" Like "B?T*" " Поверне True.
MyCheck = "CAT123khg" Like "B?T*" " Поверне False.

myString = "312T-87GD-8922"

If myString Like "###-##-####" Then ...

Оператори конкатенації рядків

Взагалі, щоб з'єднати рядки в Visual Basic, можна використовувати лише 2 оператори. Це & та +. Оператор + описано вище. Поговоримо про оператора &.

оператор конкатенації рядків - &

Використовується для конкатенації двох виразів.

Синтаксис:

результат = вираз1 & вираз2

результатобов'язковий; Будь-яка String або Variant змінна
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Якщо вираз не рядок, то вона конвертується в String Variant. Тип даних результату - String тільки тоді, коли обидва вирази мають тип String. Інакше результат String Variant. Якщо обидва вирази Null, результат теж Null. Однак, якщо тільки один з виразів містить Null значення, воно інтерпретується як порожній рядок "". Empty також інтерпретується як порожній рядок "".

Приклади:

Dim MyStr
MyStr = "Hello" & "World"
" Повернерядок "Hello World".
MyStr = "Перевірка" & 123 & " Перевірка"
" Поверне рядок "Перевірка 123 Перевірка".

Логічні оператори

Це найцікавіша група оператором. При програмуванні ви повинні знати їхню роботу та застосування (причому не тільки на Visual Basic).

У Visual Basic їх 6 штук. Розглянемо кожен оператор докладно.

оператор And

Використовується для логічного множення над двома виразами.

Синтаксис:

результат = вираз1 And вираз2

результат
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор And:

Якщо вираз1 =

, А вираз 2 =

То результат =

True True True
True False False
True Null Null
False True False
False False False
False Null False
Null True Null
Null False False
Null Null Null

Оператор And також використовується для перевірки числа бітів. Для біт оператор And працює наступним чином (дивитися зліва направо)

0 0 0
0 1 0
1 0 0
1 1 1

Приклади:

Dim A, B, C, D, MyCheck
MyCheck = A > B And B > C " Поверне True.
MyCheck = B > A And B > C " Поверне False.
MyCheck = A > B And B > D " Поверне Null.
MyCheck = A And B " Поверне8 (бітове порівняння).

Останній приклад розглянемо докладніше. Число 10 представляється у вигляді бітів наступним чином (як зошита, тобто 4 біти):

А число 8 ось так:

В результаті роботи оператора And, згідно з вищенаведеною таблицею ми отримаємо:

Тобто. 8. Навіщо ми це робили? Ми робили це для того, щоб перевірити, чи встановлений четвертий біт у числа A? Отримавши B, ми переконалися, що цей біт встановлений.

оператор Or

Використовується для здійснення логічного складання двох виразів.

Синтаксис:

результат = вираз1 Or вираз2

результатобов'язковий; Будь-яка числова (включно з Boolean) змінна
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор Or:

Якщо вираз1 =

, А вираз 2 =

То результат =

True True True
True False True
True Null True
False True True
False False False
False Null Null
Null True True
Null False Null
Null Null Null

Оператор Or використовується для встановлення певних бітів числа. Для біт оператор Or працює наступним чином (дивитися зліва направо)

0 0 0
0 1 1
1 0 1
1 1 1

Результат виділено жирним шрифтом.

Приклади:

Dim A, B, C, D, MyCheck
MyCheck = A > B Or B > C " Поверне True.
MyCheck = B > A Or B > C " Поверне True.
MyCheck = A > B Or B > D " Поверне True.
MyCheck = B > D Or B > A " Поверне Null.
MyCheck = A Or 5 " Поверне 15:

Давайте останній приклад розглянемо докладніше. Число 10 представляється у вигляді бітів наступним чином (як зошита, тобто 4 біти):

А число 5:

В результаті роботи оператора Or, згідно з вищенаведеною таблицею ми отримаємо:

Тобто. 15. Як бачите, оператор Or дуже легко та зручно використовувати не тільки у виразах порівняння, але й для встановлення певних бітів числа.

оператор Xor

Використовується для логічного заперечення двох виразів.

Синтаксис:

результат = вираз1 Xor вираз2

результатобов'язковий; Будь-яка числова (включно з Boolean) змінна
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор Xor:

Оператор Xor використовується для інвертування певних бітів числа. Для бітів оператор Xor працює наступним чином (дивитися зліва направо)

0 0 0
0 1 1
1 0 1
1 1 0

Результат виділений жирним шрифтом. Xor відрізняється від Or, тільки тим, що коли обидва біти одиниці, Xor видає 0. Оператор Xor цікавий тим властивістю, то при його подвійному застосуванні він видає те ж число. Це часто використовують у криптографії.

Приклади:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null
MyCheck = A > B Xor B > C " Поверне False.
MyCheck = B > A Xor B > C " Поверне True.
MyCheck = B > A Xor C > B " Поверне False.
MyCheck = B > D Xor A > B " Поверне Null.
MyCheck = A Xor B " Поверне 2

Цікавим прикладомвикористання оператора Xor є обмін значеннями двох чисельних змінних:

Dim a As Long , b As Long
a = 4
b = 7
a = a Xor b
b = a Xor b
a = a Xor b

Тепер змінна a містить значення змінної b і навпаки.

оператор Not

Використовується для здійснення логічного інвертування двох виразів.

Синтаксис:

результат= Not вираз

результатобов'язковий; Будь-яка числова (включно з Boolean) змінна
виразобов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор Not:

Оператор Not інвертує всі біти вирази.Для біт оператор Not працює наступним чином (дивитися зліва направо):

0 1
1 0

Результат виділений жирним шрифтом.

Приклади:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null
MyCheck = Not (A > B) " Поверне False.
MyCheck = Not (B > A) " Поверне True.
MyCheck = Not (C > D) " Поверне Null.
MyCheck = No A " Поверне-11 (всі біти інвертовані)

Розглянемо докладніше останній приклад. Число 10 представляється у вигляді бітів наступним чином (як байт, тобто 8 бітів):

Після інвертування всіх бітів отримаємо:

А це і є –11.

оператор Eqv

Використовується для здійснення логічної еквівалентності двох виразів.

Синтаксис:

результат = вираз1 Eqv вираз2

результатобов'язковий; Будь-яка числова (включно з Boolean) змінна
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор Eqv:

Для біт оператор Eqv працює наступним чином (дивитися зліва направо)

0 0 1
0 1 0
1 0 0
1 1 1

Приклади:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null
MyCheck = A > B Eqv B > C " Поверне True.
MyCheck = B > A Eqv B > C " Поверне False.
MyCheck = A > B Eqv B > D " Поверне Null.
MyCheck = A Eqv B " Поверне -3

оператор Imp

Використовується для здійснення логічної імплікації двох виразів.

Синтаксис:

результат = вираз1 Imp вираз2

результатобов'язковий; Будь-яка числова (включно з Boolean) змінна
вираз1обов'язково; Будь-який вираз
вираз2обов'язково; Будь-який вираз

Зауваження:

Наступна таблиця показує, як працює оператор Imp:

Якщо вираз1 =

, А вираз 2 =

То результат =

True True True
True False False
True Null Null
False True True
False False True
False Null True
Null True True
Null False Null
Null Null Null

Для бітів оператор Imp працює наступним чином (дивитися зліва направо)

0 0 1
0 1 1
1 0 0
1 1 1

Приклади:

Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null
MyCheck = A > B Imp B > C " Поверне True.
MyCheck = A > B Imp C > B " Поверне False.
MyCheck = B > A Imp C > B " Поверне True.
MyCheck = B > A Imp C > D " Поверне True.
MyCheck = C > D Imp B > A " Поверне Null.
MyCheck = B Imp A " Поверне -1

Оператори VBA: арифметичні, логічні, порівняння, присвоєння

Оператор - це найменша здатна виконуватись одиниця коду VBA. Оператор може оголошувати чи визначати змінну, встановлювати параметр компілятора VBA або виконувати будь-яку дію у програмі.

Арифметичних операторів у VBA всього 7. Чотири стандартні: додавання (+), віднімання (-), множення (*), поділ (/) та ще три:

  • · Зведення в ступінь (^), наприклад 2 ^ 3 = 8;
  • · цілісний поділ (). Поділяє перше число на друге, відкидаючи (не округляючи) дробову частину. Наприклад, 52 = 2;
  • · Поділ за модулем (Mod). Поділяє перше число на друге, повертаючи лише залишок від розподілу. Наприклад, Mod 5 = 1.

Оператор присвоєння в VBA – знак рівності. Можна записувати так:

а можна ще простіше:

У другому випадку не плутайте знак рівності з оператором рівності.

Вираз

означає "присвоїти змінній nVar значення 10", а якщо рядок виглядає так:

то це означає "якщо значення змінної nVar дорівнює 10".

Якщо змінної необхідно призначити об'єкт, робиться це іншими методами.

Операторів порівняння в VBA всього 8:

  • · Рівність (=), наприклад, If (nVar = 10);
  • · більше, ніж і менше, ніж (> і
  • · більше або одно і менше або одно (>= і
  • · не дорівнює (
  • · Порівняння об'єктів (Is). Визначає, посилаються об'єктні змінні на той самий об'єкт або різні, наприклад, If(obj1 is obj2);
  • · подоба (Like). Порівнює рядковий об'єкт із шаблоном та визначає, чи підходить шаблон.

Оператори порівняння завжди повертають true або false - true, якщо твердження істинне, і false, якщо хибно.

Трохи для порівняння строкових значень:

  • · При порівнянні рядкових значень регістр враховується;
  • · Пробіли в рядкових значеннях також враховуються;
  • · при порівнянні текстових рядків на більше/менше за умовчанням порівнюються просто двійкові коди символів - які більші або менші. Якщо потрібно використовувати той порядок, що йде в алфавіті, можна скористатися командою Option Compare Text

Докладніше про оператор Like. Загальний синтаксис виглядає як

Вираз1 Like Вираз2

При цьому Вираз1 - будь-який текстовий вираз VBA, а Вираз2 - шаблон, який передається оператору Like. У цьому шаблоні можна використовувати спеціальні символи підстановки (див. Табл. 1)

Табл. 1 Підстановочні символи для оператора LIKE

Дуже часто під час перевірки кількох умов використовуються логічні оператори:

  • · AND - логічне І, повинні бути істинними обидві умови;
  • · OR - логічне АБО, має бути істинним хоча б одну з умов;
  • · NOT - логічне заперечення, що повертає TRUE, якщо умова хибна;
  • · XOR - логічний виняток. У виразі E1 XOR E2 повертає TRUE, якщо тільки E1 = TRUE або тільки E2 = TRUE, інакше - FALSE;
  • · EQV - еквівалентність двох виразів, що повертає TRUE, якщо вони мають однакове значення;
  • · IMP - імплікація, повертає FALSE, якщо E1 = TRUE і E2 = FALSE, інакше - TRUE.

Пам'ятати треба про AND, OR, NOT, інші логічні оператори застосовуються рідко.

Майже у будь-якій програмі VBA використовуються оператори конкатенації. У VBA їх два – + або &. Рекомендується завжди використовувати &, тому що:

  • · при використанні & проводиться автоматичне перетворення числових значень на рядкові - немає небезпеки припуститися помилки;
  • · При використанні оператора + додавання рядкового значення зі значенням типу Null дає Null. Приклад:

MsgBox "Повідомлення користувача" & vUserName

Порядок застосування операторів можна регулювати за допомогою круглих дужок.

3 . Змінні та типи даних

Змінні VBA, оголошення змінних, Option Explicit, правила іменування, типи даних VBA, вихідні значення змінних

Змінні - контейнери для зберігання даних, що змінюються. Без них не обходиться практично жодна програма. Для простоти змінну можна порівняти з номером у гардеробі - ви здаєте в "гардероб" якісь дані, у відповідь вам видається номерок. Коли вам знову знадобилися ці дані, ви "поставляєте номерок" і отримуєте їх. Приклад роботи зі змінними VBA може виглядати так:

Dim nMyAge As Integer

nMyAge = nMyAge + 10

Dim nMyAge As Integer

Як розшифрувати цей рядок:

Dim – це область видимості змінної. У VBA передбачено 4 ключові слова для визначення області видимості змінних:

  • · Dim - використовується в більшості випадків. Якщо змінна оголошена як Dim в області об'яв модуля, вона буде доступна у всьому модулі, якщо в процедурі - тільки на час роботи цієї процедури;
  • · Private - при оголошенні змінних в VBA означає те саме, що і Dim;
  • · Public - така змінна буде доступна всім процедурам у всіх модулях даного проекту, якщо ви оголосили її в області оголошень модуля. Якщо ви оголосили її всередині процедури, вона буде поводитися як Dim/Private;
  • · Static - такі змінні можна використовувати лише всередині процедури. Ці змінні видно лише всередині процедури, в якій вони оголошені, проте зберігають своє значення між різними викликами цієї процедури. Зазвичай використовуються для накопичення будь-яких значень. Наприклад:

Static nVar1 As Integer

nVar1= nVar1 + 1

Якщо немає жодних особливих вимог, то є сенс завжди вибирати область видимості Dim.

Друге слово у нашому оголошення (nMyAge) - це ідентифікатор (простіше кажучи, ім'я) змінної. Правила вибору імен у VBA є єдиними для багатьох елементів (змінні, константи, функції та процедури тощо). Ім'я:

  • · Повинно починатися з літери;
  • · не повинно містити пробілів та символів пунктуації (виняток - символ підкреслення);
  • · максимальна довжина - 255 символів;
  • · Повинно бути унікальним у поточній області видимості (докладніше - далі);
  • · зарезервовані слова (ті, що підсвічуються іншим кольором у вікні редактора коду) використовувати не можна.

При створенні програм VBA рекомендується визначитися з правилами, за якими будуть присвоюватися імена об'єктам - угоду про іменування. Найчастіше використовується так звана угорська угода (на честь одного з програмістів Microsoft, Charles Simonyi, угорця за національністю):

  • · Ім'я змінної має починатися з префікса, записаного малими літерами. Префікс вказує, що саме зберігатиметься у цій змінній:
    • o str (або s) - String, символьне значення;
    • o fn (або f) - функція;
    • o c (або зробити всі літери великими) - константа;
    • o b - Boolean, логічне значення (true або false);
    • o d - дата;
    • o obj (або o) - посилання на об'єкт;
    • o n - числове значення.
  • · Імена функцій, методів і кожне слово у складовому слові має починатися з великої літери:

MsgBox objMyDocument.Name

Sub CheckDateSub()

· в ранніх версіях VB не було слова Const - всі константи визначалися як змінні, а на відміну їх записували великими літерами, між словами ставили підкреслення: COMPANY_NAME

Багато програмістів використовують такий підхід для позначення констант і зараз (але використання ключового слова Const тепер обов'язково - це буде розказано в наступному розділі).

Третя частина нашого оголошення – As Integer – це вказівка ​​на тип даних нашої змінної. Тип даних визначає, які види можна буде зберігати в нашій змінній.

У VBA передбачені такі типи даних:

· Чисельні (byte - ціле число від 0 до 255, integer - ціле число від -32768 до 32767, long - велике ціле число, currency (велике десяткове число з 19 позиціями, включаючи 4 позиції після коми), decimal (ще більше десяткове число з 29 позиціями), single і double - значення з плаваючою комою (double вдвічі більше));

Увага! Спроба оголосити змінну з типом Decimal (наприклад Dim n As Decimal) призведе до синтаксичної помилки. Щоб отримати можливість працювати з типом Decimal, змінну потрібно спочатку оголосити як Variant або взагалі оголосити без типу (Dim n), оскільки тип даних Variant використовується у VBA за промовчанням.

  • · рядкові (string змінної довжини (до приблизно 2 млрд символів) та фіксованої довжини (до приблизно 65400 символів);
  • · Дата і час (date - від 01.01.100 до 31.12.9999);
  • · логічний (boolean - може зберігати тільки значення True та False);
  • · Об'єктний (object - зберігає посилання на будь-який об'єкт у пам'яті);
  • · Variant - спеціальний тип даних, який може зберігати будь-які інші типи даних.

Можна ще використовувати типи даних, але їх спочатку потрібно визначити за допомогою виразу Type. Зазвичай типи даних використовуються як додатковий засіб перевірки значень, що вводяться користувачем (класичний приклад - поштовий індекс).

Деякі моменти, пов'язані з вибором типів даних для змінних:

  • · загальний принцип-- Виберіть найменший тип даних, який може вмістити вибрані значення. Якщо є якісь сумніви - вибирайте більший тип даних, щоб уникнути помилок;
  • · якщо є можливість, краще не використовувати типи даних з плаваючою комою (single та double). p align="justify"> Робота з такими типами даних проводиться повільніше, крім того, можуть бути проблеми при порівняннях за рахунок округлень;
  • · якщо є можливість, краще не скористатися типом Variant. Цей тип все одно наводиться VBA одного з інших типів, але пам'яті йому потрібно більше. Крім того, під час такої неявної освіти можуть виникнути помилки;
  • · При визначенні змінних можна використовувати так звані символи визначення типу (% - integer, $ - String і т.п.). Наприклад, у нашому прикладі потрібно закоментувати рядок Dim nVar 1 As Integer, а у другому рядку написати:

nVar1% = nVar1% + 1

Такий підхід є застарілим та до використання не рекомендується.

При оголошенні змінних можна не вказувати її тип. Наприклад, наше оголошення може виглядати так: Dim nVar1

У цьому випадку змінна буде автоматично оголошена з Variant.

В принципі, VBA можна працювати і без оголошення змінних. Наприклад, такий код

nVar1= nVar1 + 1

буде цілком працездатним. Якщо ми використовуємо змінну програму без її оголошення, то буде автоматично створена нова змінна типу Variant. Проте оголошувати змінні потрібно обов'язково! І при цьому бажано вказувати потрібний тип даних. Чому:

  • · скорочується кількість помилок: програма від початку відмовиться приймати в змінну значення неправильного типу (наприклад, рядкове замість числового);
  • · при роботі з об'єктами підказка за якостями та способами діє тільки тоді, коли ми спочатку оголосили об'єктну змінну з необхідним типом. Наприклад, в Excel два варіанти коду працюватимуть однаково:

перший варіант:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add()

другий варіант:

Set oWbk = Workbooks.Add()

Але підказка за властивостями та методами об'єкта oWbk працюватиме лише у другому випадку.

Усі досвідчені розробники взагалі забороняють використання змінних без явного їхнього оголошення. Для цього можна скористатися спеціальною командоюкомпілятора (вона міститься тільки в розділі оголошень модуля) Option Explicit

а можна вставляти цю команду у всі модулі при їх створенні автоматично - встановивши у вікні редактора коду прапорець Require Variable Declarations (меню Tools -> Options, вкладка Editor).

Проілюструвати, навіщо вони це роблять можна на простому прикладі:

На вигляд код не повинен викликати жодних проблем і просто виводити у вікні повідомлення одиницю. Насправді, він виведе порожнє вікно повідомлення. Причина захована дуже підступно: у третьому рядку n - це зовсім не англійська літера N, а російська П. На вигляд у вікні редактора коду відрізнити їх дуже складно. У той же час, компілятор VBA, зустрівши такий код, просто створить нову змінну з типом даних Variant, у якої буде порожнє значення. На виявлення такої помилки може знадобитися певний час.

Хороше правило - оголошувати змінні заздалегідь, а не коли вони були потрібні. Це дозволяє зробити програму більш читаною та чітко спланованою.

Можна оголосити кілька змінних в одному рядку, наприклад:

Dim n1 As Integer, s1 As String

Присвоєння значень змінним виглядає так:

Якщо потрібно збільшити існуюче значення змінної, то команда може виглядати так:

nVar1 = nVar1 + 1

В обох прикладах знак рівності означає не "рівно", а присвоїти.

При присвоєння значень змінним слід пам'ятати наступне:

· Строкові значення завжди полягають у подвійні лапки:

sVar1 = "Hello";

значення дати/часу полягають у "решітках" - символи фунта:

dVar1 = #05/06/2004#

Зверніть увагу, що при присвоєнні значення дати/часу в такий "явний спосіб" нам доведеться використовувати прийняті в США стандарти: 05 в даному випадку - це місяць, 06 - день. Відображення цього значення (наприклад, у вікні повідомлення) буде залежати від регіональних налаштувань на комп'ютері користувача.

Якщо потрібно передати шістнадцяткове значення, перед ним ставляться символи &H:

Що міститься в змінних до надання їм значень?

  • · У змінних всіх числових типів даних - 0.
  • · У рядкових змінних змінної довжини - "" (рядок нульової довжини).
  • · У рядкових змінних фіксованої довжини - рядок даної довжини із символами ASCII 0 (ці символи на екран не виводяться).
  • · У Variant - порожнє значення.
  • · В Object - ніщо (немає посилання на жодний з об'єктів).

Короткі теоретичні відомості

1. Синтаксис та семантика мови програмування VBA

Синтаксис мови програмування - набір правил, що описує комбінації символів алфавіту, які вважаються правильно структурованою програмою (документом) чи її фрагментом.

Основні синтаксичні принципи цієї мови:

  • VBA нечутливий до регістру;
  • щоб закоментувати код до кінця рядка, використовується одинарна лапка (") або команда REM;
  • символьні значення повинні полягати у подвійні лапки (");
  • максимальна довжина будь-якого імені у VBA (змінні, константи, процедури) – 255 символів;
  • початок нового оператора - переведення на новий рядок (крапка з комою, як у C, Java, JavaScript, для цього не використовується);
  • обмежень на максимальну довжинурядка немає (хоча в редакторі у рядку міститься лише 308 символів). Кілька операторів в одному рядку поділяються двокрапками:
    MsgBox "Перевірка 1" : MsgBox "Перевірка 2"
  • для зручності читання можна об'єднати кілька фізичних рядків в один логічний за допомогою пробілу та знака підкреслення після нього:
    MsgBox "Повідомлення користувача" _
    &vUserName

Семантика мови – це смислове значення слів. У програмуванні - початкове значення значення операторів, основних конструкцій мови тощо.

Оператор- це найменша здатна виконуватись одиниця коду VBA. Оператор може оголошувати чи визначати змінну, встановлювати параметр компілятора VBA або виконувати будь-яку дію у програмі.

Арифметичнихоператорів у VBA всього 7.

Чотири стандартні: додавання (+), віднімання (−), множення (*), поділ (/), і ще три:

  • зведення у ступінь (^). Наприклад, 2^3 = 8;
  • цілісний поділ (\). Поділяє перше число на друге, відкидаючи (не округляючи) дробову частину. Наприклад, 52 = 2;
  • розподіл за модулем (Mod). Поділяє перше число на друге, повертаючи лише залишок від розподілу. Наприклад, Mod 5 = 1.

Оператор присвоєння у VBA – це знак рівності. Можна записувати так:

Let nVar = 10
а можна ще простіше:
nVar = 10

Не плутайте знак рівності з оператором рівності. Останній вираз означає "присвоїти змінній nVar значення 10", а якщо рядок виглядає так: If (nVar = 10), то це означає "якщо значення змінної nVar дорівнює 10".

Операторів порівнянняу VBA всього 8:

  • рівність (=). Наприклад, If (nVar = 10);
  • більше, ніж (>) та менше, ніж (10);
  • більше або дорівнює (>=) і менше або дорівнює (= 10);
  • не дорівнює (). Наприклад, If (nVar10);
  • порівняння об'єктів (Is). Визначає, чи посилаються об'єктні змінні на той самий об'єкт або на різні. Наприклад, If (obj1 is obj2);
  • подібність (Like). Порівнює рядковий об'єкт із шаблоном та визначає, чи підходить шаблон.

Оператори порівняння завжди повертають True(якщо твердження істинно) або False(якщо твердження хибне).

Дуже часто під час перевірки кількох умов використовуються логічні оператори:

  • And - логічне І. повинні бути істинними обидві умови;
  • Or - логічне АБО. Має бути істинною хоча б одна з умов;
  • Not – логічне заперечення. Повертає True, якщо умова помилкова;
  • Xor – логічний виняток. У виразі E1 Xor E2 повертає True, якщо E1 = True або тільки E2 = True, інакше - False;
  • Eqv - еквівалентність двох виразів, що повертає True, якщо вони мають однакове значення;
  • Imp – імплікація, E1 Imp E2 повертає False, якщо E1 = True та E2 = False, інакше – True.

Пам'ятати треба про And, Or, Not, Інші логічні оператори використовуються рідко.

Змінні- це контейнери для зберігання даних, що змінюються. Без них не обходиться практично жодна програма. Для простоти змінну можна порівняти з номером у гардеробі – ви здаєте в гардероб якісь дані, у відповідь вам видається номерок. Коли вам знову знадобилися ці дані, ви "поставляєте номерок" і отримуєте їх.

Кожна змінна має ім'я. Звернення до змінної відбувається на ім'я. Правила вибору імен у VBA є єдиними для багатьох елементів (змінні, константи, функції, процедури тощо):

  • ім'я має починатися з літери;
  • не повинно містити пробілів та символів пунктуації (виняток - символ підкреслення);
  • максимальна довжина – 255 символів;
  • має бути унікальним у поточній області видимості
  • зарезервовані слова (ти, які підсвічуються синім кольором у вікні редактора коду) не можна використовувати.

При створенні програм VBA рекомендується визначитися з правилами, за якими надаватимуться імена об'єктам - угоду про іменування. Найчастіше використовується так звана угорська угода (на честь одного з програмістів Microsoft, Charles Simonyi, угорця за національністю):

  • Ім'я змінної має починатися з префікса, записаного малими літерами. Префікс вказує, що саме зберігатиметься у цій змінній:
    str (або s) – String, символьне значення;
    fn (або f) – функція;
    sub – процедура;
    c (або всі літери імені великі) - константа(контейнер для зберігання даних, які, на відміну змінних, не змінюються під час виконання VBA-программы);
    b - Boolean, логічне значення (True чи False);
    d – дата;
    obj (або o) – посилання на об'єкт;
    n - числове значення;
  • імена функцій, методів та кожне слово у складовому слові має починатися з великої літери:
    MsgBox objMyDocument.Name
    Sub CheckDateSub()

Тип данихвідносять до фундаментальних понять будь-якої мови програмування. Тип даних визначає безліч допустимих значень, яке може набувати величина (змінна або константа), та безліч дій, які можна виконати з цією величиною.

2. Основні типи даних VBA

У VBA передбачені такі типи даних:

  • числові:
    Byte- ціле число від 0 до 255, для зберігання потрібен 1 байтпам'яті;
    Integer- ціле число від -32 768 до 32 767, 2 байти ;
    Long- велике ціле число від −2 147 483 648 до 2 147 483 647, 4 байти ;
    Currency(грошовий) - велике десяткове число з 19 позиціями, включаючи 4 позиції після коми
    (Від -922337203685477,5808 до 922337203685477,5807), 4 байти,
    використовується для зберігання чисел, коли точність дуже важлива, що буває при обчислення з грошовими одиницями;
    Decimal- ще більше десяткове число з 29 позиціями (після коми можна використовувати від 0 до 28 позицій), 8 байт;
    Singleі Double- значення з плаваючою комою ( 4 та 8 байт)
    (від -3.402823·10 38 до -1.401298·10 -45 для негативних значень та
    від 1.401298·10 -45 до 3.402823·10 38 для позитивних значень для Single, та
    від -1.79769313486232·10 308 до -4.94065645841247·10 -324 для негативних значень та
    від 4.94065645841247·10 -324 до 1.79769313486232·10 308 для позитивних значень для Double);
  • рядкові ( Stringзмінної довжини (приблизно до 2 млрд символів) та фіксованої довжини (приблизно до 65 400 символів));
  • дата і час ( Date- від 01.01.100 до 31.12.9999), 8 байт;
  • логічний ( Boolean- може зберігати тільки значення True та False), 2 байти;
  • об'єктний ( Object- зберігає посилання будь-який об'єкт у пам'яті);
  • Variant- спеціальний тип даних, який може зберігати будь-які типи даних, 16 байт +1
Позначення типів даних є ключовими словами мови (і виділяється після набору редактора VBA). Над різними типамиданих допустимі різні операції. У VBA є три основні типи операцій:
  • математичні, виконуються над числами, їх результатом є числа;
  • операції відношення, що можуть застосовуватися не тільки до числа, їх результатом є значення логічного типу;
  • логічні, використовуються в логічних виразах та їх результатом є логічні значення.

3. Пріоритети операцій

Пріоритет Операція
1
2
3
4
5
6
7
8
9
10
11
12
Виклик функції та дужки
^
- (Зміна знака)
*, /
\
Mod
+, –
>, <, >=, <=, <>, =
Not
And
Or
Xor

4. Математичні функції

Функція Значення, що повертається
Abs (<число>) Модуль (абсолютна величина) числа
Atn (<число>) Арктангенс
Cos (<число>) Косинус
Exp (<число>) Експонента, тобто результат зведення основи натурального логарифму у вказаний ступінь
Log(<число>) Натуральний логарифм
Rnd (<число>) Випадкове число з інтервалу Гальмує