Vba заперечення. Оператори порівняння (Visual Basic). Основні типи даних VBA

28.03.2020 Новини

знакназваОпис
= РівноПовертає True якщо лівий та правий операнди рівні. Зверніть увагу, що це навантаження оператора присвоєння.
<> Не дорівнюєПовертає True якщо лівий та правий операнди не рівні.
> Краще ніжПовертає True якщо лівий операнд більше правого операнда.
< Менше ніжПовертає True якщо лівий операнд менше правого операнда.
>= Більше або дорівнюєПовертає True якщо лівий операнд більше або дорівнює правому операнду.
<= Менше або дорівнюєПовертає True якщо лівий операнд менший або дорівнює правому операнду.
Is Довідковий капіталПовертає значення True, якщо посилання на лівий об'єкт - це той самий екземпляр, що й посилання на правий об'єкт. Він також може використовуватися з Nothing (посилання на нульовий об'єкт) з обох боків. Примітка.Оператор Is спробує змусити обидва операнди до Object перед виконанням порівняння. Якщо будь-яка сторона є примітивним типом або Variant , який містить об'єкт (або не-об'єктний підтип, або vtEmpty), порівняння призведе до помилки часу виконання 424 - «Потрібен об'єкт». Якщо будь-який операнд належить іншому інтерфейсуодного і того ж об'єкта, порівняння поверне True. Якщо вам потрібно перевірити справедливість як екземпляра, так іінтерфейсу, ObjPtr(left) = ObjPtr(right) використовуйте ObjPtr(left) = ObjPtr(right) .

нотатки

Синтаксис VBA дозволяє «ланцюжка» операторів порівняння, але загалом ці конструкції слід уникати. Порівняння завжди виконується ліворуч праворуч тільки на 2 операндах за раз, і кожне порівняння призводить до Boolean . Наприклад, вираз...

A = 2: b = 1: c = 0 expr = a > b > c

Може бути прочитаний в деяких контекстах як перевірка того, чи b між a і c . У VBA це оцінюється так:

A = 2: b = 1: c = 0 expr = a > b > c expr = (2 > 1) > 0 expr = True > 0 expr = -1 > 0 "CInt(True) = -1 expr = False

Будь-який оператор порівняння, крім Is використовуватися з Object як операнда буде виконуватися на значенні, що повертається Object «s члена за умовчанням . Якщо об'єкт не має члена за промовчанням, порівняння призведе до помилки часу виконання 438 - «Об'єкт не підтримує його властивість або метод».

Якщо Object не ініціалізований, порівняння призведе до помилки часу виконання 91 - «Об'єктна змінна або З заблокованою змінною блоку».

Якщо літерал Nothing використовується з будь-яким оператором порівняння, відмінним від Is, це призведе до помилки компіляції - "Неприпустиме використання об'єкта".

Якщо Object за замовчуванням Object є інший Object, VBA буде постійно викликати елемент за замовчуванням кожного наступного значення, що повертається до тих пір, поки не буде повернутий примітивний тип або не буде піднята помилка. Наприклад, припустимо, що у SomeClass є стандартний член Value , який є екземпляром ChildClass з членом ChildValue по ChildValue . Порівняння...

Set x = New SomeClass Debug.Print x > 42

Оцінюватиметься як:

Set x = New SomeClass Debug.Print x.Value.ChildValue > 42

Якщо операнд є числовим, а іншийоперандом є String або Variant підтипу String, буде виконано числове порівняння. У разі, якщо String може бути віднесено до числа, результатом порівняння буде помилка часу виконання 13 - «Невідповідність типу».

Якщо обидва операнда є String або Variant підтипу String , порівняння рядків виконуватиметься з урахуванням параметра порівняння параметрів модуля коду. Ці порівняння виконуються характером характером. Зверніть увагу, що символьне уявлення String містить число, не збігається із зіставленням числових значень:

Public Sub Example() Dim Left As Variant Dim right As Variant Left = "42" right = "5" Debug.Print Left > right "Prints False Debug.

З цієї причини переконайтеся, що змінні String або Variant передаються до числа перед виконанням чисельних порівнянь нерівності.

Якщо один із операндів - це Date , то числове порівняння за базовим подвійним значенням буде виконуватися, якщо інший операнд є числовим або може бути перетворений на числовий тип.

Якщо інший операнд є String або Variant підтипу String який може бути перенесений в Date з використанням поточного мовного стандарту, String буде передана в Date . Якщо він не може бути застосований до Date у поточній локалі, результатом порівняння буде помилка часу виконання 13 – «Невідповідність типу».

Слід бути обережними при порівнянні значень Double або Single і Booleans. На відміну від інших числових типів ненульові значення не можна вважати True через поведінку VBA у просуванні типу даних порівняння з використанням числа з плаваючою точкою в Double:

Public Sub Example() Dim Test As Double Test = 42 Debug.Print CBool(Test) "Prints True." Debug.Print CBool(Test) = True "Prints True Debug.Print CDbl(-1) = CDbl(True) "Prints True End Sub


Оператор Синтаксис Опис
AND A AND B Кон'юнкція: Якщо А та В мають значення True, то - True. Інакше - False
OR A OR B Диз'юнкція: Якщо будь-який з операнда має значення True, то - True. Інакше - False
NOT NOT A Заперечення: Якщо А має значення False, то – True. Інакше - False
XOR A XOR B Виняток: Якщо А має значення True або має значення True, то - True. Інакше - False
EQV A EQV B Еквівалентність: Якщо А має таке ж значення як і, то - True. Інакше - False
IMP A IMP B Імплікація: Якщо А має значення True і має значення False, то - False. Інакше - True

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

Результатом логічної операції є значення типу Boolean (або Null, якщо хоча б один із операндів має значення Null).

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

Синтаксис:
Операнд_1 AND Операнд_2


Оператор AND виконує логічну кон'юнкцію.

Результатом цієї операції є значення True, тільки коли обидва операнди мають значення True, інакше - False.


Таблиця істинності


Оператор AND можна використовувати для кількох операндів:


(5 3) AND (5=6) результатом буде False


Незалежно від кількості операндів результатом логічної операції AND буде True лише у тому випадку, коли всі операнди вирази матимуть значення True. У будь-якому іншому випадку результатом буде False. Зверніть увагу, що операнди полягають у круглі дужки. VBA спочатку обчислює значення кожного операнда всередині дужок, а потім уже весь вираз повністю.

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

Синтаксис:
Операнд_1 OR Операнд_2


Оператор OR виконує логічну диз'юнкцію.

Результатом цієї операції є значення True, якщо хоча б один з операндів має значення True, інакше – False.


Таблиця істинності


Оператор OR можна використовувати для кількох операндів:


(5 3) OR (5=6) результатом буде True


Незалежно від кількості операндів результатом логічної операції OR завжди буде True в тому випадку, якщо хоча б один з операндів виразу матиме значення True. Інакше результатом буде False.

Оператори AND та OR можна комбінувати:


((5 3)) OR (5=6) результатом буде True

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

Синтаксис:
NOT Операнд


Оператор NOT виконує логічне заперечення.

Оператор NOT використовує лише один операнд.


Таблиця істинності


Оператори AND OR NOT можна комбінувати:


((5 3)) OR NOT (5=6) результатом буде True

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

Синтаксис:
Операнд_1 XOR Операнд_2


Оператор XOR виконує логічний виняток.

Результатом цієї операції є значення True, якщо операнди мають різні значення, інакше – False.


Таблиця істинності


((5 3)) OR NOT (5=6) XOR (5=5) результатом буде False

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

Синтаксис:
Операнд_1 EQV Операнд_2


Оператор EQV – це оператор логічної еквівалентності.

Результатом цієї операції є значення True, якщо операнди мають однакові значення, інакше – False.


Таблиця істинності


((5 3)) OR NOT (5=6) EQV (5=5) результатом буде True

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

Синтаксис:
Операнд_1 IMP Операнд_2


Оператор IMP виконує логічну операцію імплікації.


Таблиця істинності


((5 3)) OR NOT (5=6) IMP (5=5) результатом буде True


Логічний оператор IMP найменш інтуїтивно зрозумілий із усіх логічних операторів. На щастя, необхідність його застосування виникає досить рідко.


У Visual Basic можна виділити п'ять основних та важливих логічних операторів: And, Or, Not, Xor та Eqv. Роль кожного з них я зараз спробую пояснити!

Отже, And!
Це, мабуть, найпростіший і найпотрібніший логічний оператор серед інших.

Help:
Повертає результат кон'юнкції (логічного І) для двох виразів.

Синтксис:
результат = вираз1Andвираз2

Тобто. результатбуде істинним тільки в тому випадку, коли істинні вираз1Івираз2.Значення, що повертаються оператором, представлені в наступній таблиці:

вираз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

А тепер маленький приклад:

Уявімо, що змінні User_Has_Computer і User_Has_Car оголошені як булеви значення і в процесі яких-небудь дій набули значення або True або False. Ви встановлюєте умову, яка перевіряє ці значення:

Ми ж семулюємо це самі:) - впишіть кудись наступні рядки:


Dim User_Has_Car As Boolean
User_Has_Computer = True
User_Has_Car = True

If User_Has_Computer And User_Has_Car Then
MsgBox "Ви щаслива людина!"
End If

Під час перевірки даної умовина екран вискочить повідомлення, що повідомляють, що користувач щаслива людина, т.к. у нього є машина Ікомп'ютер:-)! А тепер перед третім чи четвертим рядком поставте апостроф """ - закоментуйте рядок. Тепер одна зі змінних буде False за замовчуванням. Тепер повідомлення НЕ вискочить, тому що користувач не дуже щасливий, маючи машину АБОкомп'ютер...

Наступний оператор не менш простий – Or.

Help:
Виконує операцію логічного АБО (складання) для двох виразів.

Синтаксис:
результат = вираз1Orвираз2

Результат буде істинним тільки в тому випадку, якщо тільки один із виразів є істинним. Значення, що повертаються оператором, представлені в наступній таблиці:

вираз1 вираз1 результат
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

І знову маленький приклад із колишніми булевими пермінними User_Has_Computer і User_Has_Car, які у процесі будь-яких дій прийняли значення чи True чи False.

Dim User_Has_Computer As Boolean
Dim User_Has_Car As Boolean
User_Has_Computer = False
User_Has_Car = True

If User_Has_Computer або User_Has_Car Then
MsgBox "Ви майже щаслива людина!"
End If

Під час перевірки цієї умови на екран вискочить повідомлення, що сповіщають, що користувач майже щаслива людина, т.к. у нього є машинa, але немає комп'ютера:-|...

Оператор Not.

Help:
Виконує над виразом операцію логічного заперечення.

Синтаксис:
результат = Not вираз

Тобто. результатстає протилежним виразу(Виключаючи Null). Значення, що повертаються оператором, представлені в наступній таблиці:

Приклад:

Dim User_Has_Computer As Boolean

User_Has_Computer = False

If Not User_Has_Computer Then
MsgBox "Співчую...:)"
End If

Пояснюю: умова If... Then виконується тоді, коли якийсь вираз (на місці...) дорівнює True. Уявімо, що змінна User_Has_Computer = False. Тоді рядок
Not User_Has_Computer дає результат True та умова виконується!

Оператор Xor.

Help:
Виконує операцію виключає АБО для двох виразів.

Синтаксис:
[результат =] вираз1 Xor вираз2

В принципі цей оператор схожий на Or, але це не просто АБО, а виключне АБО. Якщо одне і тільки одне з виразівістинно (має значення True), результатмає значення True. А оператор Or припускає два справжніх вирази. Результат

Приклад:

Dim User_Has_Computer As Boolean
Dim User_Has_Car As Boolean
User_Has_Computer = False
User_Has_Car = True

If User_Has_Computer Xor User_Has_Car Then
MsgBox "Вам потрібна машина І комп'ютер!"
End If

Тут так само, як і в попередньому прикладі, умова виконується тільки тоді, коли рядок User_Has_Computer Xor User_Has_Car дійсна (= True). А істинна вона тоді і тільки тоді, коли тільки одна з умов істинна. Якщо обидва, то умова вже не здійсниться.

Оператор Eqv.

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

Синтаксис:
результат = вираз1 Eqv вираз2

Тут дуже просто: результат буде істинним у разі, якщо обидва висловлювання або істинні, або хибні. Результатвизначається так:

Приклад:

Dim User_Has_Computer As Boolean
Dim User_Has_Car As Boolean
User_Has_Computer = True
User_Has_Car = True

If User_Has_Computer Eqv User_Has_Car Then
MsgBox "Ви або щаслива чи нещасна людина!"
End If

Тут комп'ютер назве Вас людиною "щасливою чи нещасною", т.к. умова виконується лише тоді, коли користувач має і машину, і комп'ютер чи того й іншого.

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

Результатом будь-якої операції порівняння є значення Boolean: True, False.

Якщо обидва операнди у вираженні порівняння мають той самий тип даних, VBA виконує просте порівняння цього типу.

Якщо обидва операнди у виразі порівняння мають певні типи і ці типи не сумісні, VBA видає повідомлення про помилку розбіжності типів.

Якщо один або обидва операнди у виразі порівняння є змінними типу Variant, VBA намагається перетворити тип Variant на будь-який сумісний тип.

Порівняння рядків

При порівнянні рядків операторами відношення, VBA порівнює кожен рядок зліва направо посимвольно.

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

Слід бути уважним у порівнянні рядків змінної довжини.

Двійкове та текстове порівняння рядків

Для збереження тексту комп'ютер використовує схему, в якій кожен символ має унікальний номер. Усі літери алфавіту мають свої унікальні номери. Зазвичай літери верхнього регіструмають менші номери, ніж літери нижнього регістру. Число, що відповідає певній літері або символу, називається кодом символу.

При виконанні двійкового порівняння рядковий інформації VBAвикористовує бінарний еквівалент числа кожного символу. Такий метод порівняння називається двійковимабо бінарнимі є методом порівняння за умовчанням.

Т.к. літери верхнього регістру мають менші двійкові номери, літери верхнього регістру розташовуються за алфавітом перед літерами нижнього регістру. Тому при двійковому порівнянні рядків, рядок "АБВ" буде менше рядка "абв".


При текстовому порівнянні рядків VBA не використовує двійковий еквівалент символів і не "розрізняє" верхній та нижній регістр. У текстовому порівнянні рядок "абв" дорівнює рядку "АБВ".

Для вибору методу порівняння рядків використовується директива Option Compare


Option Compare


Ця директива повинна знаходитися в області оголошення модуля.

Конкатенація рядків

Приєднання одного рядка до іншого називається конкатенацією рядків.

Конкатенацію рядків зазвичай використовують для формування рядків із різних джерел у процедурі, щоб створювати повідомлення для виведення на екран. У VBA є два оператори для конкатенації рядків.

Оператор конкатенації (&)

Оператор (&)VBA використовується тільки для конкатенації рядків.

Синтаксис


Операнд_1 & Операнд_2 [& Операнд_3..]


Операнд_N - будь-який допустимий рядковий або чисельний вираз (який перетворюється на рядковий).

Тип даних результату конкатенації рядків – String.

Якщо операнд у виразі конкатенації рядків має значення Empty або Null, VBA інтерпретує цей операнд як рядок нульової довжини (рядок символів, що не містить).

Зверніть увагу!Символ (&) операції конкатенації обов'язково необхідно відокремлювати пробілом від імені змінної, т.к. інакше VBA може інтерпретувати цей символ як символ визначення типу Long.

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

Для конкатенації рядків також можна використовувати оператор (+).

Цей оператор має такий самий синтаксис та вимоги, як і оператор (&). Проте слід розуміти, що у 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 " Поверне 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, або 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.

Результат зазвичай має тип 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 або B > D " Поверне True.
MyCheck = B > D або B > A " Поверне Null.
MyCheck = A або 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