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.Print Val(left) > Val(right) "Prints True End Sub

По этой причине убедитесь, что переменные 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. "True is promoted to Double - Test is not cast to Boolean Debug.Print Test = True "Prints False "With explicit casts: 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:
Возвращает результат конъюнкции (логического И) для двух выражений.

Синтксис:
результат = выражение1 And выражение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

При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь счастливый человек, т.к. у него есть машинa И компьютер:-)! А теперь перед третьей или четвёртой строкой поставьте апостроф """ - закоменнтируйте строку. Теперь одна из переменных будет False по умолчанию. Теперь сообщение НЕ выскочит, т.к. пользователь не очень счастливый, имея машину ИЛИ компьютер...

Следующий оператор не менее простой - Or.

Help:
Выполняет операцию логического ИЛИ (сложения) для двух выражений.

Синтаксис:
результат = выражение1 Or выражение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 Or 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, 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.
  • Если одно из Variant выражений 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 = Not 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