Операторы

Операторы позволяют произвести определенные действия с данными. Например, операторы присваивания служат для сохранения данных в переменной, математические операторы позволяют произвести арифметические вычисления, а оператор конкатенации строк используется для соединения двух строк в одну. Рассмотрим операторы, доступные в 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
  • / — деление. Результатом деления является вещественное число типов Single или Double, даже если производится деление целых чисел. Пример:
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
  • Mod — остаток от деления:
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. = — присваивание.
Совет

Visual Basic for Applications (VBA)
Статьи по Visual Basic for Applications (VBA)

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов