Строковые операторы VBA и операторы сравнения. Логические операторы VBA Vba математические и логические операторы


Оператор Синтаксис Описание
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 наименее интуитивно понятный из всех логических операторов. К счастью, необходимость в его применении возникает довольно редко.

Язык VBA был разработан таким образом, чтобы его можно было достаточно легко и быстро изучить, а затем ежедневно использовать. Язык VBA полезен как профессиональным программистам, так и простым пользователям, для автоматизации повседневной рутинной работы. Какой бы не была Ваша цель: упростить повседневную работу или повысить производительность труда, безусловно, язык VBA лучше всего подходит для этих целей, поскольку он разработан специально для работы с приложениями пакета Microsoft Office.

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

Операторы VBA

  • AppActivate title, wait - Активизирует открытое приложение по заданному аргументом title заголовку или идентификатору задачи
  • Beep - подача звукового сигнала
  • Call name, argumentlist - Вызов процедуры с названием name. (Поскольку ключевое слово Call необязательно и можно вызвать процедуру, используя только ее имя, этот оператор редко используется в программировании VBA)
  • ChDir path - Заменяет текущую папку папкой, указанной аргументом path
  • Close filenumberlist - Изменяет текущий диск на диск, указанный аргументом drive
  • Const CONSTNAME - Объявляет константой переменную с именем CONSTNAME
  • Date = date - Изменяет системную дату на дату, указанную аргументом date
  • Declare name - Объявляет процедуру из динамически присоединяемой библиотеки (DLL)
  • DefBool letterrange - Оператор уровня модуля, устанавливающий тип Boolean типом данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange (например, DefBool A-F)
  • DefByte letterrange - Задает тип Byte как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefCur letterrange - Задает тип Currency как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefDate letterrange - Задает тип Date как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefDbl letterrange - Задает тип Double как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefInt letterrange - Задает тип Integer как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefLng letterrange - Задает тип Long как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefObj letterrange - Задает тип Object как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefSng letterrange - Задает тип Single как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefStr letterrange - Задает тип String как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefVar letterrange - Задает тип Variant как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DeleteStting appname, section, key - Удаляет раздел section или ключ key из реестра Windows
  • Dim varname - Объявляет переменную с именем varname
  • Do:Loop - Выполняет цикл по нескольким операторам до тех пор, пока логическое условие равно True
  • End Keyword - Завершает процедуру, функцию или управляющую структуру
  • Enum name - Оператор уровня модуля, который объявляет переменную перечислимого типа
  • Erase arraylist - Очищает память от динамически выделенного массива или выполняет повторную инициализацию массива с фиксированными размерами
  • Error errornumber - Имитирует ошибку, присваивая объекту Err значение errornumber
  • Event procedurename(arglist) - Оператор может присутствовать только в модуле класса. Он объявляет событие, определенное пользователем
  • Exit keyword - Выход из процедуры, функции или управляющей структуры
  • FileCopy source, destination - Копирует файл source в папку destination (при этом можно изменить имя исходного файла)
  • For Each:Next - Цикл по каждому члену коллекции
  • For:Next - Цикл по нескольким операторам, выполняемый до тем пор, пока счетчик цикла не достигнет заданного значения
  • Function - Объявляет пользовательскую процедуру-функцию
  • Get #filenumber, varname - Производит чтение в переменную из файла ввода-вывода, открытого оператором Open
  • GoSub:Return - Осуществляет вход в подпрограмму, описанную в процедуре, и выход из нее. (Использование этого оператора не рекомендуется, поскольку создание отдельной процедуры позволит сделать код более простым для понимания)
  • GoTo line - Передает управление на строку кода, на которую указывает метка line
  • If:Then:Else - Выполняет один из двух фрагментов кода на основе результата логической проверки
  • Imlements InterfaceName, Class - Определяет название интерфейса или класса, который будет реализован в модуле класса
  • Input #filenumber, varlist - Производит чтение из файла ввода-вывода в переменные
  • Kill pathname - Удаляет файл pathname с диска
  • Let varname = expression - Устанавливает переменную varname равной выражению expression. Ключевое слово Let необязательно и практически никогда не используется
  • Line Input #filenumber, var - Производит чтение одной строки из файла ввода-вывода и сохраняет ее в строковой переменной
  • Load - Загружает форму в память, но не выводит ее на экран
  • Lock #filenumber, recordrange - Управляет доступом к файлу ввода-вывода
  • LSet stringvar = string - Размещает строку, начиная с крайнего слева символа, в переменной типа String. При этом размер переменной не изменяется
  • LSet var1 = var2 - Копирует переменную одного пользовательского типа в переменную другого, но совместимого, пользовательского типа
  • Mid - Заменяет заданное количество символов в строковой переменной символами из другой строки
  • MidB - Побайтно заменяет символы в строковой переменной символами из другой строки
  • MkDir path - Создает папку с именем path
  • Name oldpathname as newpathname - Изменяет имя файла или папки
  • On Error - Задает способ обработки ошибок
  • On:GoSub, On:GoTo - Передает управление заданной строке на основе результата выражения
  • Open pathname, : - Открывает файл для ввода-вывода
  • Option Base 0|1 - Задает (на уровне модуля) для массивов установленную по умолчанию нижнюю границу (номер первого элемента)
  • Option Compare Text|Binary - Определяет (на уровне модуля) установленный по умолчанию режим сравнения строк
  • Option Explicit - Принуждает программиста к явному объявлению переменных. Введите этот оператор на уровне модуля
  • Option Private - Указывает, что модуль закрыт, и к нему нельзя обратиться из процедур, расположенных в других модулях. Введите оператор на уровне модуля
  • Print #filenumber - Производит запись в файл ввода-вывода
  • Private varname - Объявляет, что переменная varname будет закрытой, и ею можно будет пользоваться только в модуле, в котором она объявлена. Введите оператор на уровне модуля
  • Property Get - Объявляет процедуру свойства, которая будет принимать значения этого свойства
  • Property Let - Присваивает значение свойству в процедуре свойства
  • Property Set - Устанавливает ссылку на объект в процедуре свойства
  • Public varname - Открывает доступ к переменной varname для всех процедур, содержащихся в модуле
  • Put #filenumber, varname - Записывает данные из переменной varname а файл ввода-вывода
  • RaiseEvent eventname, arguments - Вызывает событие с именем eventname
  • Randomize number - Инициализирует генератор случайных чисел. Пропустить аргумент number, чтобы каждый раз инициализировать его разными начальными числами
  • ReDim varname - Повторно выделяет память для динамического массива
  • Rem comment - Указывает VBA, что следующий за оператором текст является комментарием. Вместо этого оператора чаще используется символ апострофа
  • Reset - Закрывает все файлы ввода-вывода, которые были ранее открыты оператором Open
  • Resume - После возникновения ошибки возобновляет выполнение программы со строки, в которой возникла ошибка
  • RmDir path - Удаляет папку
  • RSet stringvar = string - Записывает строку в строковую переменную, выравнивая символы по правому краю
  • SaveSetiing appname, : - Создает или сохраняет установки в реестре Windows
  • Seek #filenumber, position - Устанавливает текущую позицию в файле ввода-вывода
  • Select Case - Выполняет группу операторов на основе значения выражения
  • SendKeys string, wait - Передает в активное приложение нажатия клавиш, заданные строкой string так, как будто они были введены с клавиатуры
  • Set objectvar = object - Присваивает объект object объектной переменной с именем objectvar
  • SetAttr pathname, attr - Задает атрибуты доступа, определенные аргументом attr (например, vbReadOnly) для файла, заданного аргументом pathname
  • Static varname - Объявляет (на уровне модуля), что переменная varname будет сохранять свои значения все время, пока будет выполняться код модуля
  • Stop - Переводит VBA в режим паузы
  • Sub - Объявляет процедуру
  • Time = time - Устанавливает системное время равным аргументу time
  • Type varname - Объявляет пользовательский тип данных. (Используется только на уровне модуля)
  • Unload - Удаляет форму из памяти
  • Unlock #filenumber, recordrange - Удаляет атрибуты доступа для файла ввода-вывода
  • While:Wend - Выполняет цикл по группе операторов до тех пор, пока логическое условие истинно
  • Width #filenumber, width - Задает ширину строки для файла ввода-вывода
  • With:End With - Выполняет группу операторов для заданного объекта
  • Write #filenumber - Производит запись данных в файл ввода-вывода

Операторы VBA: арифметические, логические, сравнения, присвоения

Оператор - это наименьшая способная выполняться единица кода VBA. Оператор может объявлять или определять переменную, устанавливать параметр компилятора VBA или выполнять какое-либо действие в программе.

Арифметических операторов в VBA всего 7. Четыре стандартных: сложение (+), вычитание (-), умножение (*), деление (/) и еще три:

  • возведение в степень (^), например 2^3 = 8 ;
  • целочисленное деление (\). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например, 5\2 = 2 ;
  • деление по модулю (Mod). Делит первое число на второе, возвращая только остаток от деления. Например, 5 Mod 2 = 1 .

Оператор присвоения в VBA - знак равенства. Можно записывать так:

Let nVar = 10

а можно еще проще:

nVar = 10

Во втором случае не путайте знак равенства с оператором равенства.

Выражение

nVar = 10

значит "присвоить переменной nVar значение 10", а если строка выглядит так:

If (nVar = 10)

то это значит "если значение переменной nVar равно 10".

Если переменной нужно назначить объект, то делается это другими способами.

Операторов сравнения в VBA всего 8:

  • равенство (=), например, If (nVar = 10) ;
  • больше, чем и меньше, чем (> и <), например, If (nVar > 10) ;
  • больше или равно и меньше или равно (>= и <=), например, If (nVar >= 10) ;
  • не равно (<>), например, If(nVar<>10) ;
  • сравнение объектов (Is). Определяет, ссылаются объектные переменные на тот же объект или на разные, например, If(obj1 is obj2) ;
  • подобие (Like). Сравнивает строковый объект с шаблоном и определяет, подходит ли шаблон.

Операторы сравнения всегда возвращают true или false - true, если утверждение истинно, и false, если ложно.

Немного про сравнение строковых значений:

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

Option Compare Text

Чуть подробнее про оператор Like. Общий его синтаксис выглядит как

Выражение1 Like Выражение2

При этом Выражение1 - любое текстовое выражение VBA, а Выражение2 - шаблон, который передается оператору Like. В этом шаблоне можно использовать специальные подстановочные символы (см. Табл. 3.1)

Табл. 3.1 Подстановочные символы для оператора LIKE

Очень часто при проверке нескольких условий используются логические операторы:

  • AND - логическое И, должны быть истинными оба условия;
  • OR - логическое ИЛИ, должно быть истинным хотя бы одно из условий;
  • NOT - логическое отрицание, возвращает TRUE, если условие ложно;
  • XOR - логическое исключение. В выражении E1 XOR E2 возвращает TRUE, если только E1 = TRUE или только E2 = TRUE, иначе - FALSE;
  • EQV - эквивалентность двух выражений, возвращает TRUE, если они имеют одинаковое значение;
  • IMP - импликация, возвращает FALSE, если E1 = TRUE и E2 = FALSE, иначе - TRUE.

Помнить нужно про AND, OR, NOT, остальные логические операторы используются редко.

Почти в любой программе VBA используются операторы конкатенации. В VBA их два - + или &. Рекомендуется всегда использовать &, потому что:

  • при использовании & производится автоматическое преобразование числовых значений в строковые - нет опасности допустить ошибку;
  • при использовании оператора + сложение строкового значения со значением типа Null дает Null.

MsgBox "Сообщение пользователю" & vUserName

Порядок применения операторов можно регулировать при помощи круглых скобок.

Эти операторы сравнивают два выражения для определения равны ли они, и если нет то, как они отличаются. Is , IsNot и Like детально обсуждаются на отдельных страницах справки. Отношения операторов сравнения обсуждаются на этой странице.

Result = expression1 comparisonoperator expression2 result = object1 object2 result = string Like pattern

result
Обязательный. Результатом является значение Boolean , представляющее результат сравнения.

expression
Обязательный. Произвольное выражение.

comparisonoperator
Обязательный. Любой оператор сравнения отношения.

object1 , object2
Обязательный. Имя любого ссылочного объекта.

string
Обязательный. Произвольное выражение типа String .

pattern
Обязательный. Любое выражение String или диапазон символов.

В следующей таблице приводится список операторов сравнения и условий, определяющих, является ли result True или False .

Примечание

При сравнении строк строковые выражения вычисляются на основе их алфавитного порядка сортировки, который зависит от параметра Option Compare .

Option Compare Binary задает метод сравнения строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. Порядок сортировки определяется кодовой страницей. В следующем примере показан типичный порядок двоичной сортировки.

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text задает метод сравнения строк на основе порядка сортировки текста (без учета регистра), определяемого региональными установками приложения. При установке Option Compare Text и сортировке символов в предыдущем примере применяется следующий текстовый порядок сортировки:

(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)

Зависимость от языкового стандарта

При установке Option Compare Text результат сравнения строк может зависеть от языкового стандарта, в котором выполняется приложение. Два символа в одном языковом стандарте могут считаться равными, а в другом нет. При использовании сравнения строк для принятия важных решений, например разрешить ли попытку входа в систему, следует учитывать чувствительность к языковым стандартам. Рассмотрите возможность установки Option Compare Binary или вызова , который учитывает языковой стандарт.

Использование операторов сравнения с выражениями Object не допускается при Option Strict On . При Option Strict Off и либо выражение expression1 , либо expression2 является Object , типы времени выполнения определяют, как они будут сравниваться. В следующей таблице показано сравнение выражений и результаты сравнения в зависимости от типа операндов, определяемых во время выполнения:

При числовом сравнении Nothing приравнивается к 0. При сравнении строк Nothing обрабатывается как "" (пустая строка).

Операторы сравнения (< . <= , > , >= , = , <>) могут быть перегружены ; это означает, что класс или структура могут переопределить их поведение, когда операнд имеет тип этого класса или структуры. Если ваш код использует эти операторы для такого класса или структуры, убедитесь, что вы понимаете его переопределенное поведение. Дополнительные сведения см. в разделе