Операторы

Операторы позволяют произвести определенные действия с данными. Например, операторы присваивания служат для сохранения данных в переменной, математические операторы позволяют произвести арифметические вычисления, а оператор конкатенации строк используется для соединения двух строк в одну. Рассмотрим операторы, доступные в VBA, подробно.

Математические операторы

Производить операции над числами позволяют следующие операторы:

Debug.Print 10 + 5   ' 15
Debug.Print 10.5 + 5 ' 15,5

Если в операции сложения участвуют значения типов Integer и Long, то результат вычисления будет иметь тип Long:

Dim x As Long, y As Integer
x = 50: y = 10
Debug.Print TypeName(x + y) ' Long
Debug.Print 10 - 5   ' 5
Debug.Print 10.5 - 5 ' 5,5
Debug.Print 10 * 5   ' 50
Debug.Print 10.5 * 5 ' 52,5
Debug.Print 10 / 3           ' 3,33333333333333
Debug.Print TypeName(10 / 3) ' Double
Debug.Print 10 \ 3     ' 3
Debug.Print 10.5 \ 2   ' 5
Debug.Print 10 ^ 2     ' 100
Debug.Print 10.5 ^ 2   ' 110,25
Debug.Print 10 Mod 2 ' 0 (10 - (10 \ 2) * 2)
Debug.Print 10 Mod 3 ' 1 (10 - (10 \ 3) * 3)
Debug.Print 10 Mod 4 ' 2 (10 - (10 \ 4) * 4)
Debug.Print 10 Mod 6 ' 4 (10 - (10 \ 6) * 6)

Если в операции участвуют вещественные числа, то они округляются до ближайших целых чисел еще до выполнения операции:

Debug.Print 10.5 Mod 2 ' 0 (10 - (10 \ 2) * 2)
Debug.Print 10.6 Mod 2 ' 1 (11 - (11 \ 2) * 2)
Debug.Print -(10)  ' -10
Debug.Print -(-10) ' 10

Переменной типа Variant можно присвоить специальное значение Null, которое означает отсутствие значения. Результатом любой операции, в которой участвует переменная со значением Null, будет значение Null.

При выполнении операций над вещественными числами следует учитывать ограничения точности вычислений. Например, результат следующей операции может показаться странным:

Debug.Print (0.3 - 0.1 - 0.1 - 0.1) ' -2,77555756156289E-17

Ожидаемым был бы результат 0.0, но, как видно из примера, мы получили совсем другой результат. Если необходимо производить операции с фиксированной точностью, то следует использовать тип Currency:

Dim a As Currency, b As Currency, c As Currency, d As Currency
a = 0.3: b = 0.1: c = 0.1: d = 0.1
Debug.Print (a - b - c - d) ' 0

Операторы конкатенации строк

Для конкатенации (объединения двух строк в одну) строк предназначен оператор &. Результат операции всегда будет иметь тип String. Пример:

Debug.Print "Строка1" & " " & "Строка2" ' Строка1 Строка2

Если в операции участвует число, то оно будет автоматически преобразовано в строку:

Debug.Print "Строка" & " " & 10  ' Строка 10
Debug.Print "Строка" & " " & 1.6 ' Строка 1,6

Вместо оператора & можно также использовать оператор +, но в этом случае оба операнда должны быть строками. Если один из операндов является числом, то компилятор выведет сообщение об ошибке. Пример использования оператора +:

Debug.Print "Строка1" + " " + "Строка2" ' Строка1 Строка2

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

Оператор присваивания предназначен для сохранения значения в переменной. Значение переменной присваивается с помощью оператора = таким образом:

<Переменная> = <Значение или выражение>

Пример сохранения целочисленного значения в переменной:

Dim x As Integer
x = 327

Приоритет выполнения операторов

В какой последовательности будет вычисляться приведенное ниже выражение?

x = 5 + 10 * 3 / 2

Это зависит от приоритета выполнения операторов. В данном случае последовательность вычисления выражения будет такой:

  1. Число 10 будет умножено на 3, т. к. приоритет оператора умножения выше приоритета оператора сложения.
  2. Полученное значение будет поделено на 2, т. к. приоритет оператора деления равен приоритету оператора умножения (а операторы с равными приоритетами выполняются слева направо), но выше чем у оператора сложения.
  3. К полученному значению будет прибавлено число 5, т. к. оператор присваивания = имеет наименьший приоритет.
  4. Значение будет присвоено переменной x.
x = 5 + 10 * 3 / 2
Debug.Print x ' 20

С помощью скобок можно изменить последовательность вычисления выражения:

x = (5 + 10) * 3 / 2

Теперь порядок вычислений будет другим:

  1. К числу 5 будет прибавлено 10.
  2. Полученное значение будет умножено на 3.
  3. Полученное значение будет поделено на 2.
  4. Значение будет присвоено переменной x.
x = (5 + 10) * 3 / 2
Debug.Print x ' 22,5

Перечислим операторы в порядке убывания приоритета:

  1. ^ —возведение в степень.
  2. -x — унарный минус.
  3. *, / — умножение, деление.
  4. \ — целочисленное деление.
  5. Mod — остаток от деления.
  6. +, - — сложение, вычитание.
  7. = — присваивание.

Совет

Если возникают какие-либо сомнения в последовательности выполнения выражения, то просто заключите сомнительную часть в круглые скобки.

Предыдущая статья Все статьи Следующая статья