Оператор Xor выполняет логическую операцию исключающее ИЛИ. Значение выражения будет True тогда и только тогда, когда любой, но только один, его операнд имеет значение True.
Оператор Eqv выполняет проверку эквивалентности, т.е. значение всего выражения будет True, если оба его операнда имеют одно и то же значение.
Оператор Imp выполняет логическую операцию импликация. Значение выражения будет иметь значение True, если первый операнд имеет значение False, но False, если первый операнд – True, а второй – False.
Далее все приведенные выше описания логических операторов сведены в таблицу истинности, которая отображает все возможные комбинации значений операндов, а также получаемые при этом значения результатов.
p |
q |
p And q |
p Or q |
Not p |
p Xor q |
p Eqv q |
p Imp q |
True |
True |
True |
True |
False |
False |
True |
True |
True |
False |
False |
True |
False |
True |
False |
False |
False |
True |
False |
True |
True |
True |
False |
True |
False |
False |
False |
False |
True |
False |
True |
True |
Например, следующее выражение:
(Var1 >= 1) And (Var1 <= 10)
будет иметь значение True, если значение переменной Var1 находится в диапазоне от 1 до 10, включая граничные точки диапазона. А выражение:
(Var1 < 1) Or (Var1 > 10)
наоборот, будет иметь значение True, если значение переменной Var1 не принадлежит указанному диапазону.
Приоритет операторов указывает порядок их обработки в сложном выражении. Если в выражении используется более одного оператора, то все они выполняются в строго определенном порядке, что обеспечивает однозначное трактование значения этого выражения. Порядок вычисления сложного выражения рассмотрим на примере процедуры, вычисляющей объем шара по формуле 4πR3/3, листинг которой приведен далее.
1: Sub Calculation()
2: Const strTitle = "Calculation"
3: Const Pi = 3.14
4: Dim Radius As Double ' Радиус
5: Dim Volume As Double ' Объем
6:
7: Radius = InputBox("Введите радиус", strTitle)
8: Volume = (4# * Pi * (Radius ^ 3#)) / 3#
9: MsgBox "Объем шара радиусом " & Radius & _
10: " равен " & Volume, , strTitle
11: End Sub
После ввода радиуса, например, равным 2 она выдаст следующий результат:
Основные вычисления процедуры Calculation выполняются в строке 8:
Volume = (4# * Pi * (Radius ^ 3#)) / 3#
В ней символы «#» после чисел были вставлены редактором Visual Basic вместо нулей в их дробной части, например, 4# вместо 4.0, и означают, что соответствующие значения относятся к типу Double. Оценка этого выражения на VBA выполняется точно также как и в математике – на основании всем известного приёма упростить выражение. Согласно этого приёма, в начале вычисляются подвыражения в самых внутренних скобках, т.е. Radius ^ 3#. Для определенности далее будем считать введённый с помощью функции InputBox Radius = 2, а константа Pi = 3.14. Тогда 23 = 8, а все выражение примет вид:
Volume = (4# * 3.14 * 8#) / 3#
Далее вычисляется следующее подвыражение в круглых скобках – числитель: 4# * 3.14 * 8#. Поскольку в этом выражении идут подряд две равнозначные операции умножения, то они выполняются в порядке следования слева направо, т.е. сначала будет вычислено 4 * 3.14 = 12.56, а затем – 12.56 * 8 = 100.48. В результате все выражение упростится до:
Volume = 100.48 / 3#,
которое после вычисления примет следующее значение:
Volume = 33.4933333333333.
Иногда процесс оценки выражений представляется с помощью диаграмм, получивших название дерево вычислений. Они показывают, как исходное выражение, шаг за шагом, сводится к единственному значению. Тогда пошаговый процесс оценки нашего выражения с помощью деревьев вычислений может выглядеть, например, следующим образом:
Разложение сложного выражения на подвыражения с помощью скобок не только изменяет естественный порядок его оценки, но и улучшает зрительное восприятие. Скобками также пользуются, если есть сомнения относительно порядка выполнения (приоритетов) операторов. В таблице, приведенной далее, представлены все операторы VBA в порядке уменьшения их приоритетов.
Приоритет |
Операция |
Описание |
1 |
() |
Круглые скобки |
2 |
^ |
Возведение в степень |
3 |
- |
Унарный минус |
4 |
*, / |
Умножение и деление |
5 |
\ |
Целочисленное деление |
6 |
Mod |
Деление по модулю |
7 |
+, - |
Сложение и вычитание |
8 |
& |
Конкатенация |
9 |
>, <, >=, <=, =, <>, Is, Like |
Операторы сравнения |
10 |
Not |
НЕ |
11 |
And |
И |
12 |
Or |
ИЛИ |
13 |
Xor |
Исключающее ИЛИ |
14 |
Eqv |
Эквивалентность |
15 |
Imp |
Импликация |
16 |
= |
Присваивание |
На основании приведенного выше примера и таблицы приоритетов можно сформулировать правила вычисления сложных выражений VBA следующим образом:
1. Оценка (вычисление) сложного выражения осуществляется на основе приоритетов входящих в него операторов.
2. Наивысшим приоритетом обладают круглые скобки, которые используются для:
a) разложения сложного выражения на подвыражения,
b) придания выражению более структурированного и наглядного вида,
c) изменения установленного по умолчанию приоритета выполнения операторов,
d) а также в случае сомнения относительно порядка выполнения операторов.
3. Подвыражения, записанные в круглых скобках, оцениваются в установленном порядке выполнения операторов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.