На чтение 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
очень редко используется. Хорошим правилом является то, что если вы не можете объяснить, что это значит, вы должны использовать другую конструкцию.