Базовые типы данных и операции над ними, страница 10

Бинарные операторы «+», «-», «*» и «/» имеют тот же смысл, что и в математике, но лишь незначительно отличаются от них по начертанию. Унарный оператор «-» служит для изменения знака числа. Возведение числа в степень n – это n-кратное умножение его на само себя. Например, 23 – это то же самое, что и 2 * 2 * 2, т.е. 8. На VBA это записывается как:

2 ^ 3.

Операции целочисленного деления «\» и остаток от целочисленного деления (деление по модулю) «Mod» имеют следующие особенности:

1.  Перед выполнением операции, если необходимо, операнды округляются до ближайших целых чисел.

2.  Если результат получился нецелым – дробная часть просто отбрасывается.

Например:

8.51 \ 2.11

8.51 Mod 2.11

При этом значением первого выражения будет 4, а второго – 1.

Арифметические операторы «+», «*» и «^», которые увеличивают значение выражения, имеют одну особенность – результат выражения может выйти за пределы допустимого диапазона значений. Например, при выполнении строки 3 приведенной далее процедуры TestOverflow значение выражения 32767 + 1 превысит допустимый диапазон значений для типа Integer (32767), и её выполнение прервется с выдачей соответствующего сообщения об ошибке.

1: Sub TestOverflow()

2:    Dim Var As Long

3:    Var = 32767 + 1

4:    MsgBox Var

5: End Sub

Эту ошибку можно исправить, если заменить тип Integer выражения 32767 + 1 на тип Long с большим диапазоном значений. Для этого достаточно один из операндов преобразовать в Long любым из способов:

1.  задав тип литерала с помощью символа определения типа &:

Var = 32767& + 1

2.  явно преобразовав тип с помощью функции CLng:

Var = CLng(32767) + 1

Типы выражений, а также функции преобразования типов данных приведены здесь же далее.

Операторы сравнения иногда называют еще операторами отношения. Они выполняются над операндами сходных типов. Результатом любого оператора сравнения всегда является значение типа Boolean. Полный список операторов сравнения VBA приведен далее:

=

– равно,

<> 

– неравно,

– больше,

– меньше,

>=

– больше или рано,

<=

– меньше или равно,

Is

– является,

Like

– подобно.

Большинство из них имеет общепринятое значение. Например, выражение:

Var1 >= 5

будет иметь значение True, если переменная Var1 больше или равна 5, и False – если Var1 меньше 5. А выражение:

Var2 = Var1 = 5

присваивает переменной Var2 значение True, если значение переменной Var1 равно 5, и False – во всех остальных случаях. В нём левый оператор «=» – это оператор присваивание, а правый – сравнения. Поэтому, для того чтобы подчеркнуть смысл этого выражения, его правую часть рекомендуется заключить в круглые скобки, как, например:

Var2 = (Var1 = 5).

Оператор Is (является) применяется только к данным типа Object, и возвращает значение True, только если оба его операнда указывают на один и тот же объект. Он необходим, поскольку все остальные операторы сравнения VBA в применении к данным типа Object не имеют смысла.

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

1.  имеют одинаковую длину,

2.  состоят из одинаковых символов,

3.  расположенных в одном и том же порядке.

Например:

"абв" = "абв"  ' True

"абв" = "абв " ' False

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

"абв" < "абв " ' True

будет иметь значение True, поскольку левая строка действительно «короче» правой.

Результаты выполнения всех операторов сравнения для строковых операндов зависит от установки директивы транслятора Option Compare, которая имеет следующий синтаксис:

Option Compare [Binary|Text]

Она определяет способ сравнения текстовых операндов следующим образом:

Binary  – бинарное сравнение,

Text       – текстовое сравнение.

По умолчанию выполняется бинарное сравнение.

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

"Абв < абв"    ' True

При текстовом сравнении регистр символов игнорируется и считается, что символы верхнего регистра равны соответствующим символам нижнего регистра. Тогда выражение:

"Абв = абв"    ' True

будет иметь значение True.

Директива Option Compare должна быть помещена на отдельной строке в начале модуля, в области его описаний. Она используется только на уровне модуля и влияет на способ сравнения во всех процедурах этого модуля. Например, следующая директива устанавливает текстовый способ сравнения:

Option Compare Text.

Если такая директива отсутствует, сравнение выполняется бинарным способом.

Оператор Like (подобно) служит для сравнения данных типа String особым образом. Он проверяет, соответствует ли строка заданному образцу (pattern). Таким способом можно искать в тексте некоторое слово, или целую фразу, соответствующих образцу. Иногда поиск такого типа называют нечетким поиском (fuzzy search).

Синтаксис оператора Like выглядит следующим образом:

<строка> Like <образец>

Здесь:

строка – любое строковое выражение,

образец – специальным образом сконструированное строковое выражение, служащее образцом, с которым сравнивается строка.

Образец для поиска строится с помощью специальных символов, список и значения которых приведены далее:

#

– любая цифра

?

– любой символ

*

– любое количество любых символов

[<список>]

– любой символ из списка

[!<список>]

– любой символ, не входящий в список

Например, следующее выражение: