На чтение 6 мин Опубликовано 15.12.2015
Содержание
- Операторы Excel VBA
- Математические операторы
- Строковые операторы
- Операторы сравнения
- Логические операторы
- Встроенные функции
Операторы Excel VBA
При написании кода VBA в Excel набор встроенных операторов используют на каждом шагу. Эти операторы делятся на математические, строковые, операторы сравнения и логические. Далее мы подробно рассмотрим каждую группу операторов.
Математические операторы
Основные математические операторы VBA перечислены в таблице ниже.
В правом столбце таблицы указан приоритет операторов, принятый по умолчанию при отсутствии скобок. Добавляя в выражение скобки, можно изменять порядок выполнения операторов VBA по своему желанию.
| Оператор | Действие | Приоритет (1 — высший; 5 — низший) |
|---|---|---|
| ^ | Оператор возведения в степень | 1 |
| * | Оператор умножения | 2 |
| / | Оператор деления | 2 |
| Оператор деления без остатка – возвращает результат деления двух чисел без остатка. Например, 74 возвратит результат 1 | 3 | |
| Mod | Оператор модуля (остатка) – возвращает остаток от деления двух чисел. Например, 8 Mod 3 возвратит результат 2. | 4 |
| + | Оператор сложения | 5 |
| — | Оператор вычитания | 5 |
Строковые операторы
Основной строковый оператор в Excel VBA – это оператор конкатенации & (слияние):
| Оператор | Действие |
|---|---|
| & | Оператор конкатенации. К примеру, выражение «A» & «B» возвратит результат AB. |
Операторы сравнения
Операторы сравнения используются для сравнения двух чисел или строк и возвращают логическое значение типа Boolean (True или False). Основные операторы сравнения Excel VBA перечислены в этой таблице:
| Оператор | Действие |
|---|---|
| = | Равно |
| <> | Не равно |
| < | Меньше |
| > | Больше |
| <= | Меньше либо равно |
| >= | Больше либо равно |
Логические операторы
Логические операторы, как и операторы сравнения, возвращают логическое значение типа Boolean (True или False). Основные логические операторы Excel VBA перечислены в таблице ниже:
| Оператор | Действие |
|---|---|
| And | Операция конъюнкции, логический оператор И. Например, выражение A And B возвратит True, если A и B оба равны True, в противном случае возвратит False. |
| Or | Операция дизъюнкции, логический оператор ИЛИ. Например, выражение A Or B возвратит True, если A или B равны True, и возвратит False, если A и B оба равны False. |
| Not | Операция отрицания, логический оператор НЕ. Например, выражение Not A возвратит True, если A равно False, или возвратит False, если A равно True. |
В приведённой выше таблице перечислены не все логические операторы, доступные в VBA. Полный список логических операторов можно найти на сайте Visual Basic Developer Center.
Встроенные функции
В VBA доступно множество встроенных функций, которые могут быть использованы при написании кода. Ниже перечислены некоторые из наиболее часто используемых:
| Функция | Действие | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Abs | Возвращает абсолютную величину заданного числа.
Пример:
|
||||||||||||||||||||||
| Chr | Возвращает символ ANSI, соответствующий числовому значению параметра.
Пример:
|
||||||||||||||||||||||
| Date | Возвращает текущую системную дату. | ||||||||||||||||||||||
| DateAdd | Добавляет определённый временной интервал к заданной дате. Синтаксис функции:
Где аргумент интервал определяет тип временного интервала, добавляемого к заданной дате в количестве, указанном в аргументе число. Аргумент интервал может принимать одно из следующих значений:
Пример:
|
||||||||||||||||||||||
| DateDiff | Вычисляет количество определённых временных интервалов между двумя заданными датами.
Пример:
|
||||||||||||||||||||||
| Day | Возвращает целое число, соответствующее дню месяца в заданной дате.
Пример: Day(«29/01/2015») возвращает число 29. |
||||||||||||||||||||||
| Hour | Возвращает целое число, соответствующее количеству часов в заданном времени.
Пример: Hour(«22:45:00») возвращает число 22. |
||||||||||||||||||||||
| InStr | Принимает в качестве аргументов целое число и две строки. Возвращает позицию вхождения второй строки внутри первой, начиная поиск с позиции, заданной целым числом.
Пример:
Примечание: Аргумент-число может быть не задан, в таком случае поиск начинается с первого символа строки, заданной во втором аргументе функции. |
||||||||||||||||||||||
| Int | Возвращает целую часть заданного числа.
Пример: Int(5.79) возвращает результат 5. |
||||||||||||||||||||||
| Isdate | Возвращает True, если заданное значение является датой, или False – если датой не является.
Пример:
|
||||||||||||||||||||||
| IsError | Возвращает True, если заданное значение является ошибкой, или False – если ошибкой не является. | ||||||||||||||||||||||
| IsMissing | В качестве аргумента функции передаётся имя необязательного аргумента процедуры. IsMissing возвращает True, если для рассматриваемого аргумента процедуры не передано значение. | ||||||||||||||||||||||
| IsNumeric | Возвращает True, если заданное значение может быть рассмотрено как число, в противном случае возвращает False. | ||||||||||||||||||||||
| Left | Возвращает заданное количество символов от начала переданной строки. Синтаксис функции вот такой:
где строка – это исходная строка, а длина – количество возвращаемых символов, считая от начала строки. Пример:
|
||||||||||||||||||||||
| Len | Возвращает количество символов в строке.
Пример: Len(«абвгдеж») возвращает число 7. |
||||||||||||||||||||||
| Month | Возвращает целое число, соответствующее месяцу в заданной дате.
Пример: Month(«29/01/2015») возвращает значение 1. |
||||||||||||||||||||||
| Mid | Возвращает заданное количество символов из середины переданной строки. Синтаксис функции:
Mid(строка, начало, длина) где строка – это исходная строка, начало – позиция начала извлекаемой строки, длина – количество символов, которые требуется извлечь. Пример:
|
||||||||||||||||||||||
| Minute | Возвращает целое число, соответствующее количеству минут в заданном времени.Пример: Minute(«22:45:15») возвращает значение 45. | ||||||||||||||||||||||
| Now | Возвращает текущую системную дату и время. | ||||||||||||||||||||||
| Right | Возвращает заданное количество символов от конца переданной строки. Синтаксис функции:
Right(строка, длина) Где строка – это исходная строка, а длина – это количество символов, которые надо извлечь, считая от конца заданной строки. Пример:
|
||||||||||||||||||||||
| Second | Возвращает целое число, соответствующее количеству секунд в заданном времени.
Пример: Second(«22:45:15») возвращает значение 15. |
||||||||||||||||||||||
| Sqr | Возвращает квадратный корень числовой величины, переданной в аргументе.
Пример:
|
||||||||||||||||||||||
| Time | Возвращает текущее системное время. | ||||||||||||||||||||||
| Ubound | Возвращает верхний индекс измерения заданного массива.
Примечание: Для многомерных массивов в качестве необязательного аргумента может быть указано, индекс какого именно измерения нужо возвратить. Если не указано, то по умолчанию равно 1. |
||||||||||||||||||||||
| Year | Возвращает целое число, соответствующее году в заданной дате.Пример: Year(«29/01/2015») возвращает значение 2015. |
Данный список включает в себя только избранные наиболее часто употребляемые встроенные функции Excel Visual Basic. Исчерпывающий список функций VBA, доступных для использования в макросах Excel, можно найти на сайте Visual Basic Developer Center.
Оцените качество статьи. Нам важно ваше мнение:
Содержание рубрики VBA Excel на сайте «Время не ждёт». Систематизация статей по тематическим группам для ускорения поиска нужной информации по заданной теме.
-
Знакомство с VBA Excel
- Начинаем программировать с нуля
- Памятка для начинающих
- Первая кнопка (для начинающих)
- Первая форма (для начинающих)
- Первая функция (для начинающих)
- Правильные имена переменных и процедур
- Свойства ячейки (объекта Range)
- Свойство ActiveCell объекта Application
- Свойство Selection объекта Application
-
Методы VBA Excel
- Метод Application.Goto
- Метод Application.InputBox (синтаксис, параметры)
- Метод Application.Intersect (пересечение диапазонов)
- Метод Application.OnKey
- Метод Application.OnTime
- Метод Application.Union (объединение диапазонов)
- Метод Controls.Add пользовательской формы
- Метод CreateTextFile (синтаксис, параметры)
- Метод Find объекта Range
- Метод FindNext объекта Range
- Метод Hyperlinks.Add (создание гиперссылки)
- Метод OpenTextFile (синтаксис, параметры)
- Метод Range.AutoFill (автозаполнение ячеек)
- Метод Range.Insert (вставка со сдвигом ячеек)
- Метод Range.Justify (переупорядочивание текста)
- Метод Range.PasteSpecial (специальная вставка)
- Метод Range.Replace (замена текста в ячейках)
- Метод Range.Show
- Метод WorksheetFunction.Match (поиск позиции)
- Метод WorksheetFunction.Sum – сумма аргументов
- Метод WorksheetFunction.SumIf
- Метод WorksheetFunction.SumIfs
- Метод WorksheetFunction.Transpose
- Метод WorksheetFunction.VLookup
- Методы Count, CountA и CountBlank
- Методы CountIf и CountIfs
- Методы очистки ячеек (Range.Clear и другие)
- Открытие сайта методом FollowHyperlink
- Удаление ячеек со сдвигом (Range.Delete)
-
Объект Range в VBA Excel
- Автоподбор высоты объединенной ячейки
- Автоподбор ширины объединенной ячейки
- Вставка пустой строки или столбца
- Вставка формулы в ячейку
- Выделенный диапазон ячеек (адрес, выбор, строки)
- Выравнивание текста в ячейке
- Вырезание, копирование и вставка ячеек (диапазонов)
- Диапазон ячеек и массив (обмен значениями)
- Диапазон ячеек пуст (определение)
- Объединение ячеек и его отмена
- Переменная диапазона ячеек (As Range)
- Программное создание границ ячеек
- Размер ячейки (высота строки, ширина столбца)
- Свойства Column и Columns объекта Range
- Свойства Row и Rows объекта Range
- Свойство Areas объекта Range
- Свойство Cells объекта Range
- Свойство End объекта Range
- Свойство Range.Characters
- Свойство Range.CurrentRegion
- Свойство Range.Hidden
- Свойство Range.Offset
- Свойство Range.Resize (синтаксис, примеры)
- Свойство Range.Text
- Свойство Range.WrapText (перенос текста)
- Цвет текста (шрифта) в ячейке
- Цвет ячейки (заливка, фон)
- Узор (рисунок) в ячейке
- Форматирование текста в ячейке (объект Font)
- Ячейки (обращение, запись, чтение, очистка)
-
Объекты VBA Excel
- Объект Collection (создание, методы, примеры)
- Объект Dictionary (свойства, методы, примеры)
- Объект DocumentProperties — свойства документа
- Объект FileSystemObject
- Объект PageSetup (параметры страницы)
- Объект TextStream (свойства и методы)
- Рабочая книга (открыть, создать новую, закрыть)
- Рабочий лист (обращение, переименование, скрытие)
- Рабочий лист (создание, копирование, удаление)
- Регулярные выражения (объекты, свойства, методы)
-
Операторы в VBA Excel
- Арифметические операторы
- Логические операторы
- Оператор Beep (одиночный звуковой сигнал)
- Оператор If…Then…Else и функция IIf
- Оператор On Error (обработка ошибок)
- Оператор Open (синтаксис, параметры)
- Оператор Select Case (синтаксис, примеры)
- Оператор SendKeys (имитация нажатия клавиш)
- Оператор With
- Операторы сравнения
- Операторы чтения и записи в файл
-
Переменные в VBA Excel
- Глобальная переменная
- Ключевое слово Me
- Количество измерений массива
- Массивы (одномерные, многомерные, динамические)
- Пользовательские типы данных (оператор Type)
- Тип данных Decimal
- Типы данных
-
Примеры кода VBA Excel
- Автоматическая запись текущей даты и времени
- Автоматическое заполнение интервала дат (периода)
- Бегущая, ползущая и танцующая строки
- Буфер обмена (копирование, вставка, очистка)
- Вставка рисунка в ячейку
- Выбор случайной ячейки из диапазона
- Генератор случайных чисел (Rnd и Randomize)
- Генерация документов (реестр, массив, бланк)
- Генерация документов и отчетов
- Добавление кнопки в контекстное меню
- Запуск макроса при изменении ячейки
- Изменение свойств пользовательской формы
- Имитация движения и кликов мыши
- Квадратные ячейки (тетрадные клетки)
- Копирование данных с одного листа на другой
- Копирование и перемещение файлов
- Копирование строк по условию
- Номер последней заполненной строки
- Определение координат элемента массива
- Отбор неповторяющихся значений
- Отбор уникальных значений с помощью Collection
- Отбор уникальных значений с помощью Dictionary
- Открыта или закрыта книга (проверка состояния)
- Открытие файла другой программы из кода VBA Excel
- Ошибки в таблице – поиск и исправление
- Парсинг сайтов, html-страниц и файлов
- Перебор листов в книге
- Перемещение листа и его отмена
- Переход к ячейке по адресу из формулы
- Переход по ссылке к ячейке в другой книге
- Поиск значения в таблице
- Поиск и выделение дубликатов в столбце
- Пользовательская автоформа (создание)
- Проверка существования листа
- Программное создание графика (диаграммы)
- Программное создание модуля
- Программное создание формы
- Работа с умной таблицей
- Расчет рабочего времени
- Сбор данных из открытых книг
- Секундомер в ячейке рабочего листа
- Смещение умной таблицы вниз
- Создание простого тестового задания
- Создание таблицы (умной, обычной)
- Создание файлов
- Создание, копирование, перемещение папок
- Сортировка массива
- Сортировка таблицы (диапазона)
- Сохранение книг и листов в PDF
- Сохранение массива в текстовый файл
- Список папок
- Список файлов в папке
- Сравнение прайс-листов
- Сумма прописью (код пользовательской функции)
- Удаление книги из собственного кода
- Удаление повторяющихся значений в диапазоне ячеек
- Удаление пустых строк
- Удаление файлов
- Учет расхода воды и других ресурсов
- Число Пи (значение)
- Экспорт и импорт пользовательской формы
-
Прочее в VBA Excel
- Включение режима конструктора
- Время работы макроса
- Знаки подстановки для шаблонов
- Кавычки в коде — двойные и ёлочки
- Колонтитулы
- Конвертация цвета из Long в RGB
- Копирование, перемещение и поворот фигур
- Объявление функций в 64-разрядных версиях
- Округление чисел (особенности)
- Открыть папку (каталог) в проводнике
- Параметры и аргументы
- Преобразование текста в число
- Работа с трехмерными диапазонами
- Работа с фигурами (Shapes)
- Свойства файла — вывод информации о файле
- Свойство Application.WindowState
- Смена кодировки UTF-8 на ANSI (Windows-1251)
- Смена раскладки клавиатуры
- Сохранение файла рабочей книги
- Сочетание клавиш для процедуры (макроса)
- Стандартная палитра из 56 цветов
- Стандартный диалог выбора файлов Application.GetOpenFilename
-
Работа с Word из кода VBA Excel
- Bookmarks – закладки в документе Word
- Вставка таблицы Excel в документ Word
- Редактирование документов Word
- Создание и открытие документов Word
- Создание таблиц в документе Word
- Управление приложением Word
-
Редактор VBA Excel
- Debug — отладка программы
- Вызов процедуры Sub из другой подпрограммы VBA
- Защита паролем и снятие защиты проекта VBA
- Личная книга макросов (создание, предназначение)
- Макросы (запись, запуск, пример)
- Модуль (импорт, экспорт, удаление)
- Модуль, процедура, форма
- Окно Immediate (отладка кода, вычисления)
- Перенос кода процедуры и текста на новую строку
-
События VBA Excel
- Событие Worksheet.SelectionChange
-
Функции в VBA Excel
- Изменение значений других ячеек из функции
- Пользовательская функция (синтаксис, компоненты)
- Проверка переменных и выражений
- Работа с текстом (функции)
- Удаление лишних пробелов (LTrim, RTrim, Trim)
- Функции Left, Mid, Right (вырезать часть строки)
- Функции Space, String и StrReverse
- Функция Beep API (звуковой сигнал, мелодия)
- Функция Choose (синтаксис, компоненты, примеры)
- Функция FileDateTime
- Функция Filter (фильтрация массива)
- Функция Format (синтаксис, параметры, примеры)
- Функция FreeFile
- Функция Hex
- Функция InputBox (синтаксис, параметры, значения)
- Функция InStr (синтаксис, параметры, примеры)
- Функция InStrRev (синтаксис, параметры, примеры)
- Функции Int и Fix
- Функция Join (синтаксис, параметры, значения)
- Функция MicroTimer
- Функция MsgBox (синтаксис, параметры, значения)
- Функция Replace (замена подстроки)
- Функция Shell
- Функция Split (синтаксис, параметры, значения)
- Функция StrComp (сравнение строк)
- Функция StrConv (смена регистра букв)
- Функция Switch (синтаксис, примеры)
- Функция Timer (примеры)
- Функция Val (примеры)
- Функция для вычисления факториала
- Функции для работы с датой
- Функция преобразования HTML-цвета в число
- Функции преобразования типов данных
-
Циклы в VBA Excel
- Цикл Do Until… Loop
- Цикл Do While… Loop
- Цикл For Each… Next
- Цикл For… Next
- Цикл While… Wend
- Циклы (краткое описание)
-
Элементы управления в VBA Excel
- ComboBox – заполнение поля со списком
- ListBox – заполнение списка данными
- Заполнение списка ComboBox по условию
- Маска ввода в TextBox
- Привязка события к элементу управления
- Программное раскрытие ComboBox
- Размеры и расположение элементов управления
- Свойства SelStart, SelLength, SelText (TextBox)
- Свойство Picture элементов управления
- Сочетания клавиш для кнопок
- Удаление элементов ActiveX с рабочего листа
- Удаление элементов управления формы с листа
- Элемент управления CheckBox (флажок)
- Элемент управления ComboBox (поле со списком)
- Элемент управления CommandButton (кнопка)
- Элемент управления DTPicker
- Элемент управления Frame (рамка)
- Элемент управления Image
- Элемент управления Label (метка, надпись)
- Элемент управления ListBox (список)
- Элемент управления MultiPage
- Элемент управления OptionButton (переключатель)
- Элемент управления RefEdit (редактор ссылок)
- Элемент управления ScrollBar (полоса прокрутки)
- Элемент управления SpinButton (счетчик)
- Элемент управления TabStrip
- Элемент управления TextBox (текстовое поле)
- Элемент управления ToggleButton (выключатель)
- Элемент управления TreeView (древовидная структура)
Операторы VBA: арифметические, логические, сравнения, присвоения
Оператор — это наименьшая способная выполняться единица кода VBA. Оператор может объявлять или определять переменную, устанавливать параметр компилятора VBA или выполнять какое-либо действие в программе.
Арифметических операторов в VBA всего 7. Четыре стандартных: сложение (+), вычитание (-), умножение (*), деление (/) и еще три:
- возведение в степень (^), например 2^3 = 8;
- целочисленное деление (). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например, 52 = 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. В этом шаблоне можно использовать специальные подстановочные символы
Подстановочные символы для оператора LIKE
|
Подстановочный символ |
Значение |
|
# |
Любая цифра (только одна) от 0 до 9 |
|
* |
Любое количество любых символов (включая нулевое) |
|
? |
Любой символ (только один) |
|
[a,b,c] |
Любой символ (только один) из приведенного списка |
|
[!a,b,c] |
Любой символ (только один), кроме приведенных в списке |
Очень часто при проверке нескольких условий используются логические операторы:
- 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.
Возможно вам это будет интересно!
2020-11-30
An Operator can be defined using a simple expression — 4 + 5 is equal to 9. Here, 4 and 5 are called operands and + is called operator. VBA supports following types of operators −
- Arithmetic Operators
- Comparison Operators
- Logical (or Relational) Operators
- Concatenation Operators
The Arithmatic Operators
Following arithmetic operators are supported by VBA.
Assume variable A holds 5 and variable B holds 10, then −
Show Examples
| Operator | Description | Example |
|---|---|---|
| + | Adds the two operands | A + B will give 15 |
| — | Subtracts the second operand from the first | A — B will give -5 |
| * | Multiplies both the operands | A * B will give 50 |
| / | Divides the numerator by the denominator | B / A will give 2 |
| % | Modulus operator and the remainder after an integer division | B % A will give 0 |
| ^ | Exponentiation operator | B ^ A will give 100000 |
The Comparison Operators
There are following comparison operators supported by VBA.
Assume variable A holds 10 and variable B holds 20, then −
Show Examples
| Operator | Description | Example |
|---|---|---|
| = | Checks if the value of the two operands are equal or not. If yes, then the condition is true. | (A = B) is False. |
| <> | Checks if the value of the two operands are equal or not. If the values are not equal, then the condition is true. | (A <> B) is True. |
| > | Checks if the value of the left operand is greater than the value of the right operand. If yes, then the condition is true. | (A > B) is False. |
| < | Checks if the value of the left operand is less than the value of the right operand. If yes, then the condition is true. | (A < B) is True. |
| >= | Checks if the value of the left operand is greater than or equal to the value of the right operand. If yes, then the condition is true. | (A >= B) is False. |
| <= | Checks if the value of the left operand is less than or equal to the value of the right operand. If yes, then the condition is true. | (A <= B) is True. |
The Logical Operators
Following logical operators are supported by VBA.
Assume variable A holds 10 and variable B holds 0, then −
Show Examples
| Operator | Description | Example |
|---|---|---|
| AND | Called Logical AND operator. If both the conditions are True, then the Expression is true. | a<>0 AND b<>0 is False. |
| OR | Called Logical OR Operator. If any of the two conditions are True, then the condition is true. | a<>0 OR b<>0 is true. |
| NOT | Called Logical NOT Operator. Used to reverse the logical state of its operand. If a condition is true, then Logical NOT operator will make false. | NOT(a<>0 OR b<>0) is false. |
| XOR | Called Logical Exclusion. It is the combination of NOT and OR Operator. If one, and only one, of the expressions evaluates to be True, the result is True. | (a<>0 XOR b<>0) is true. |
The Concatenation Operators
Following Concatenation operators are supported by VBA.
Assume variable A holds 5 and variable B holds 10 then −
Show Examples
| Operator | Description | Example |
|---|---|---|
| + | Adds two Values as Variable. Values are Numeric | A + B will give 15 |
| & | Concatenates two Values | A & B will give 510 |
Assume variable A = «Microsoft» and variable B = «VBScript», then −
| Operator | Description | Example |
|---|---|---|
| + | Concatenates two Values | A + B will give MicrosoftVBScript |
| & | Concatenates two Values | A & B will give MicrosoftVBScript |
Note − Concatenation Operators can be used for both numbers and strings. The output depends on the context, if the variables hold numeric value or string value.
замечания
Операторы оцениваются в следующем порядке:
- Математические операторы
- Побитовые операторы
- Операторы конкатенации
- Операторы сравнения
- Логические операторы
Операторы с совпадающим приоритетом оцениваются слева направо. Порядок по умолчанию можно переопределить, используя круглые скобки ( и ) для группировки выражений.
Математические операторы
Перечислено в порядке очередности:
| знак | название | Описание |
|---|---|---|
^ |
Возведение | Верните результат подъема левого операнда в силу правого операнда. Обратите внимание, что значение, возвращаемое экспоненциацией, всегда равно Double , независимо от того, какие типы значений делятся. Любое принуждение результата к переменному типу происходит после выполнения вычисления. |
/ |
Раздел 1 | Возвращает результат деления левого операнда на правый операнд. Обратите внимание, что значение, возвращаемое делением, всегда равно Double , независимо от того, какие типы значений делятся. Любое принуждение результата к переменному типу происходит после выполнения вычисления. |
* |
Умножение 1 | Возвращает произведение двух операндов. |
|
Целостный отдел | Возвращает целочисленный результат деления левого операнда правым операндом после округления обеих сторон с округлением .5. Любое остальное подразделение игнорируется. Если правый операнд (делитель) равен 0 , это приведет к ошибке времени выполнения 11: деление на ноль. Обратите внимание, что это происходит после округления — выражения, такие как 3 0.4 , также приводят к делению на нулевую ошибку. |
Mod |
Модульное | Возвращает целочисленный остаток деления левого операнда на правый операнд. Операнд с каждой стороны округляется до целого числа до деления с округлением .5. Например, и 8.6 Mod 3 и 12 Mod 2.6 приводят к 0 . Если правый операнд (делитель) равен 0 , это приведет к ошибке времени выполнения 11: деление на ноль. Обратите внимание, что это выполняется после округления — выражения, такие как 3 Mod 0.4 , также приводят к делению на нулевую ошибку. |
- |
Вычитание 2 | Возвращает результат вычитания правого операнда из левого операнда. |
+ |
Добавление 2 | Возвращает сумму из двух операндов. Обратите внимание, что этот токен также рассматривается как оператор конкатенации, когда он применяется к String . См. Операторы конкатенации . |
1 Умножение и деление рассматриваются как имеющие тот же приоритет.
2 Сложение и вычитание рассматриваются как имеющие тот же приоритет.
Операторы конкатенации
VBA поддерживает 2 разных оператора конкатенации + и & и выполняет одну и ту же функцию при использовании со String типами — правая String добавляется к концу левой String .
Если оператор & используется с переменным типом, отличным от String , он неявно передается в String перед конкатенацией.
Обратите внимание, что оператор + конкатенации является перегрузкой оператора + сложения. Поведение + определяется переменными типами операндов и приоритетом типов операторов. Если оба операнда напечатаны как String или Variant с Variant String , они объединяются:
Public Sub Example()
Dim left As String
Dim right As String
left = "5"
right = "5"
Debug.Print left + right 'Prints "55"
End Sub
Если какая- либо сторона является числовым типом, а другая сторона является String которая может быть принудительно введена в число, приоритет типа математических операторов заставляет оператора обрабатываться как оператор сложения и добавляются числовые значения:
Public Sub Example()
Dim left As Variant
Dim right As String
left = 5
right = "5"
Debug.Print left + right 'Prints 10
End Sub
Такое поведение может привести к тонким, трудно отлаживающим ошибкам, особенно если используются типы Variant , поэтому для конкатенации обычно следует использовать оператор & .
Операторы сравнения
| знак | название | Описание |
|---|---|---|
= |
Равно | Возвращает True если левый и правый операнды равны. Обратите внимание, что это перегрузка оператора присваивания. |
<> |
Не равен | Возвращает True если левый и правый операнды не равны. |
> |
Лучше чем | Возвращает True если левый операнд больше правого операнда. |
< |
Меньше, чем | Возвращает True если левый операнд меньше правого операнда. |
>= |
Больше или равно | Возвращает True если если левый операнд больше или равен правому операнду. |
<= |
Меньше или равно | Возвращает True если левый операнд меньше или равен правому операнду. |
Is |
Справочный капитал | Возвращает значение True если ссылка на левый объект — это тот же экземпляр, что и ссылка на правый объект. Он также может использоваться с Nothing (ссылка на нулевой объект) с обеих сторон. Примечание. Оператор Is попытается принудить оба операнда к Object перед выполнением сравнения. Если какая-либо сторона является примитивным типом или Variant , который не содержит объект (либо не-объектный подтип, либо vtEmpty ), сравнение приведет к ошибке времени выполнения 424 — «Требуется объект». Если любой операнд принадлежит другому интерфейсу одного и того же объекта, сравнение вернет True . Если вам нужно проверить справедливость как экземпляра, так и интерфейса, ObjPtr(left) = ObjPtr(right) используйте ObjPtr(left) = ObjPtr(right) . |
Заметки
Синтаксис VBA позволяет «цепочки» операторов сравнения, но в целом эти конструкции следует избегать. Сравнение всегда выполняется слева направо только на 2 операндах за раз, и каждое сравнение приводит к Boolean . Например, выражение …
a = 2: b = 1: c = 0
expr = a > b > c
… может быть прочитан в некоторых контекстах как проверка того, является ли b между a и c . В VBA это оценивается следующим образом:
a = 2: b = 1: c = 0
expr = a > b > c
expr = (2 > 1) > 0
expr = True > 0
expr = -1 > 0 'CInt(True) = -1
expr = False
Любой оператор сравнения, кроме Is использоваться с Object в качестве операнда будет выполняться на возвращаемом значении Object «s члена по умолчанию . Если объект не имеет члена по умолчанию, сравнение приведет к ошибке времени выполнения 438 — «Объект не поддерживает его свойство или метод».
Если Object не инициализирован, сравнение приведет к ошибке времени выполнения 91 — «Объектная переменная или С заблокированной переменной блока».
Если литерал Nothing используется с любым оператором сравнения, отличным от Is , это приведет к ошибке компиляции — «Недопустимое использование объекта».
Если Object по умолчанию Object является другой Object , VBA будет постоянно вызывать элемент по умолчанию каждого последующего возвращаемого значения до тех пор, пока не будет возвращен примитивный тип или не будет поднята ошибка. Например, предположим, что у SomeClass есть член по умолчанию Value , который является экземпляром ChildClass с членом ChildValue по ChildValue . Сравнение…
Set x = New SomeClass
Debug.Print x > 42
… будет оцениваться как:
Set x = New SomeClass
Debug.Print x.Value.ChildValue > 42
Если либо операнд является числовым, а другой операндом является String или Variant подтипа String , будет выполнено числовое сравнение. В этом случае, если String не может быть отнесено к числу, результатом сравнения будет ошибка времени выполнения 13 — «Несоответствие типа».
Если оба операнда представляют собой String или Variant подтипа String , сравнение строк будет выполняться на основе параметра сравнения параметров модуля кода. Эти сравнения выполняются по характеру по характеру. Обратите внимание, что символьное представление String содержащей число, не совпадает с сопоставлением числовых значений:
Public Sub Example()
Dim left As Variant
Dim right As Variant
left = "42"
right = "5"
Debug.Print left > right 'Prints False
Debug.Print Val(left) > Val(right) 'Prints True
End Sub
По этой причине убедитесь, что переменные String или Variant передаются в числа перед выполнением численных сравнений неравенства.
Если один из операндов — это Date , то числовое сравнение по базовому двойному значению будет выполняться, если другой операнд является числовым или может быть преобразован в числовой тип.
Если другой операнд представляет собой String или Variant подтипа String который может быть перенесен в Date с использованием текущего языкового стандарта, String будет передана в Date . Если он не может быть применен к Date в текущей локали, результатом сравнения будет ошибка времени выполнения 13 — «Несоответствие типа».
Следует соблюдать осторожность при сравнении значений Double или Single и Booleans . В отличие от других числовых типов ненулевые значения нельзя считать True из-за поведения VBA в продвижении типа данных сравнения с использованием числа с плавающей точкой в Double :
Public Sub Example()
Dim Test As Double
Test = 42 Debug.Print CBool(Test) 'Prints True.
'True is promoted to Double - Test is not cast to Boolean
Debug.Print Test = True 'Prints False
'With explicit casts:
Debug.Print CBool(Test) = True 'Prints True
Debug.Print CDbl(-1) = CDbl(True) 'Prints True
End Sub
Побитовые Логические операторы
Все логические операторы в VBA можно рассматривать как «переопределения» побитовых операторов с тем же именем. Технически они всегда рассматриваются как побитовые операторы. Все операторы сравнения в VBA возвращают логическое значение , которое всегда не будет содержать ни одного из его битов ( False ) или всех его битов ( True ). Но он будет обрабатывать значение с любым битом, установленным как True . Это означает, что результат приведения побитового результата выражения в Boolean (см. Операторы сравнения) всегда будет таким же, как рассматривать его как логическое выражение.
Присвоение результата выражения с использованием одного из этих операторов даст побитовый результат. Обратите внимание, что в таблицах истинности ниже 0 эквивалентно False и 1 эквивалентно True .
And
Возвращает True если выражения с обеих сторон оцениваются как True .
| Левый Операнд | Правый операнд | Результат |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Or
Возвращает значение True если любая из сторон выражения имеет значение True .
| Левый Операнд | Правый операнд | Результат |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Not
Возвращает True если выражение оценивается как False и False если выражение оценивается как True .
| Правый операнд | Результат |
|---|---|
| 0 | 1 |
| 1 | 0 |
Not единственный операнд без левого операнда. Редактор Visual Basic автоматически упростит выражения с помощью аргумента левой руки. Если вы наберете …
Debug.Print x Not y
… VBE изменит линию на:
Debug.Print Not x
Аналогичные упрощения будут сделаны для любого выражения, содержащего левый операнд (включая выражения) для Not .
Xor
Также известен как «эксклюзивный» или «эксклюзивный». Возвращает значение True если оба выражения оцениваются по разным результатам.
| Левый Операнд | Правый операнд | Результат |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Заметим, что хотя оператор Xor можно использовать как логический оператор, нет абсолютно никаких оснований для этого, поскольку он дает тот же результат, что и оператор сравнения <> .
Eqv
Также известен как «эквивалентность». Возвращает True когда оба выражения оцениваются с одним и тем же результатом.
| Левый Операнд | Правый операнд | Результат |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Обратите внимание, что функция Eqv очень редко используется, поскольку x Eqv y эквивалентно гораздо более читаемому Not (x Xor y) .
Imp
Также известен как «импликация». Возвращает True если оба операнда одинаковы или второй операнд имеет значение True .
| Левый Операнд | Правый операнд | Результат |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Обратите внимание, что функция Imp очень редко используется. Хорошим правилом является то, что если вы не можете объяснить, что это значит, вы должны использовать другую конструкцию.

