Логические операторы VBA. Инструкции (операторы) языка VBA Операторы visual basic excel

21.06.2020
Наименование параметра Значение
Тема статьи: Операторы VBA
Рубрика (тематическая категория) Программирование

VBA - операторный язык. Это значит, что его программы (процедуры или функции) представляют последовательности операторов.

В языке VBA можно выделить следующие группы операторов:

1. декларативные операторы, предназначенные для описания объектов, с которыми работает программа (типов переменных, констант и массивов и др.),

2. операторы-комментарии,

3. операторы присваивания и изменения значений объектов,

4. операторы, управляющие ходом вычислений (условный, циклический, перехода).

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

Оператор комментария

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

Любая строка текста программы может заканчиваться комментарием. Комментарий в VBA начинается апострофом (") и включает любой текст, расположенный правее в строке.

К примеру,

Weight= weight+z "Увеличение весаvalue=weight*price "Новая стоимость

Оператор присваивания

Операторы присваивания - основное средство изменения состояния программы (значений переменных). Он представляет собой конструкцию, связывающую знаком = переменную (левая часть) и выражение (правая часть). Выражение состоит из операндов (имен переменных, констант, имен стандартных функций) и знаков операций (арифметических, логических, строковых, сравнения). Смысл этого оператора состоит в том, что левой части присваивается значение правой части.

Управляющие операторы

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

Условный оператор If Then Else End If

Это общепринятый в языках программирования оператор управления вычислениями позволяет выбирать и выполнять действия исходя из истинности некоторого условия.

Операторы VBA - понятие и виды. Классификация и особенности категории "Операторы VBA" 2017, 2018.

  • - Операторы жизни и сохранения Количества

    Эта категория Диала в ТРИЗ представлена как «принцип № 34, отброса и регенерации частей: а) Выполнившая свое назначение или ставшая ненужной часть объекта должна быть отброшена (растворена, испарена и т. д.) или видоизменена непосредственно в ходе работы. б)... .


  • - Элементы языка VBA

    Рис. 12.1 Расположенные объекты на форме 6. Активизируя на форме отдельно каждый объект, устанавливаем его свойство с помощью окна свойств (Properties рис. 12.2). Таким образом, интерфейс создан (рис. 12.3). Рис. 12.3. Интерфейс проекта (с... .


  • - Условные операторы

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


  • - Составные операторы условия

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


  • - Основы VBA

    Visual Basic For Application (VBA) – это сочетание одного из самых простых языков программирования и всех вычислительных возможностей табличного процессора Excel. С помощью VBA можно легко и быстро создавать разнообразные приложения, даже не являясь специалистом в области...

  • Операторы 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

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


    В Visual Basic можно выделить пять основных и важных логических операторов: And, Or, Not, Xor и Eqv. Роль каждого из них я сейчас и попытаюсь объяснить!

    Итак, And!
    Это, наверное, самый простой и нужный логический оператор среди других.

    Help:
    Возвращает результат конъюнкции (логического И) для двух выражений.

    Синтксис:
    результат = выражение1 And выражение2

    Т.е. результат будет истинным только в том случае, когда истинны выражение1 И выражение2. Возвращаемые оператором значения представлены в следующей таблице:

    выражение1 выражение2 результат
    True True True
    True False False
    True Null Null
    False True False
    False False False
    False Null False
    Null True Null
    Null False False
    Null Null Null

    А теперь маленький пример:

    Представим себе, что переменные User_Has_Computer и User_Has_Car объявлены как булевы значения и в процессе каких-нибудь действий приняли значения либо True либо False. Вы устанавливаете условие, проверяющие эти значения:

    Мы же сэмулируем это сами:) - впишите куда - нибудь следующие строки:


    Dim User_Has_Car As Boolean
    User_Has_Computer = True
    User_Has_Car = True

    If User_Has_Computer And User_Has_Car Then
    MsgBox "Вы счастливый человек!"
    End If

    При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь счастливый человек, т.к. у него есть машинa И компьютер:-)! А теперь перед третьей или четвёртой строкой поставьте апостроф """ - закоменнтируйте строку. Теперь одна из переменных будет False по умолчанию. Теперь сообщение НЕ выскочит, т.к. пользователь не очень счастливый, имея машину ИЛИ компьютер...

    Следующий оператор не менее простой - Or.

    Help:
    Выполняет операцию логического ИЛИ (сложения) для двух выражений.

    Синтаксис:
    результат = выражение1 Or выражение2

    Результат будет истинным только в том случае, если только одно из выражений истинно. Возвращаемые оператором значения представлены в следующей таблице:

    выражение1 выражение1 результат
    True True True
    True False True
    True Null True
    False True True
    False False False
    False Null Null
    Null True True
    Null False Null
    Null Null Null

    И снова маленький пример с прежними булевыми перменными User_Has_Computer и User_Has_Car, которые в процессе каких-нибудь действий приняли значения либо True либо False.

    Dim User_Has_Computer As Boolean
    Dim User_Has_Car As Boolean
    User_Has_Computer = False
    User_Has_Car = True

    If User_Has_Computer Or User_Has_Car Then
    MsgBox "Вы почти счастливый человек!"
    End If

    При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь почти счастливый человек, т.к. у него есть машинa, но нет компьютера:-|...

    Оператор Not.

    Help:
    Выполняет над выражением операцию логического отрицания.

    Синтаксис:
    результат = Not выражение

    Т.е. результат стаёт противополжным выражению (исключая Null). Возвращаемые оператором значения представлены в следующей таблице:

    Пример:

    Dim User_Has_Computer As Boolean

    User_Has_Computer = False

    If Not User_Has_Computer Then
    MsgBox "Сочувствую...:)"
    End If

    Объясняю: условие If ... Then выполняется тогда, когда какое-нибудь выражение (на месте...) равно True. Представим, что переменная User_Has_Computer = False. Тогда строка
    Not User_Has_Computer даёт результат True и условие выполняется!

    Оператор Xor.

    Help:
    Выполняет операцию исключающего ИЛИ для двух выражений.

    Синтаксис:
    [результат =] выражение1 Xor выражение2

    В принципе, этот оператор похож на Or, но это не просто ИЛИ , а исключающее ИЛИ . Если одно и только одно из выражений истинно (имеет значение True), результат имеет значение True. А оператор Or допускает два истинных выражения . Результат

    Пример:

    Dim User_Has_Computer As Boolean
    Dim User_Has_Car As Boolean
    User_Has_Computer = False
    User_Has_Car = True

    If User_Has_Computer Xor User_Has_Car Then
    MsgBox "Вам нужна машина И компьютер!"
    End If

    Здесь так же, как и в предыдущем примере условие выполняется только тогда, когда строка User_Has_Computer Xor User_Has_Car истинна (= True). А истинна она тогда и только тогда, когда только одно из условие истинно. Если оба, то условие уже не исполнится.

    Оператор Eqv.

    Help:
    Используется для проверки логической эквивалентности двух выражений.

    Синтаксис:
    результат = выражение1 Eqv выражение2

    Тут совсем всё просто: результат будет истинным в том случае, если оба выражения либо истинны, либо ложны. Результат определяется следующим образом:

    Пример:

    Dim User_Has_Computer As Boolean
    Dim User_Has_Car As Boolean
    User_Has_Computer = True
    User_Has_Car = True

    If User_Has_Computer Eqv User_Has_Car Then
    MsgBox "Вы или счастливый или несчастный человек!"
    End If

    Здесь компьютер назовёт Вас человеком "счастливым или несчастным", т.к. условие выполняется только тогда, когда пользователь имеет и машину и компьютер или не того и не другого.

    Краткие теоретические сведения

    1. Синтаксис и семантика языка программирования VBA

    Синтаксис языка программирования - набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или её фрагментом.

    Основные синтаксические принципы этого языка следующие:

    • VBA нечувствителен к регистру;
    • чтобы закомментировать код до конца строки, используется одинарная кавычка (") или команда REM;
    • символьные значения должны заключаться в двойные кавычки (");
    • максимальная длина любого имени в VBA (переменные, константы, процедуры) - 255 символов;
    • начало нового оператора - перевод на новую строку (точка с запятой, как в C, Java, JavaScript, для этого не используется);
    • ограничений на максимальную длину строки нет (хотя в редакторе в строке помещается только 308 символов). Несколько операторов в одной строке разделяются двоеточиями:
      MsgBox "Проверка 1" : MsgBox "Проверка 2"
    • для удобства чтения можно объединить несколько физических строк в одну логическую при помощи пробела и знака подчеркивания после него:
      MsgBox "Сообщение пользователю" _
      & vUserName

    Семантика языка - это смысловое значение слов. В программировании - начальное смысловое значение операторов, основных конструкций языка и т. п.

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

    Арифметических операторов в VBA всего 7.

    Четыре стандартных: сложение (+), вычитание (−), умножение (*), деление (/), и еще три:

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

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

    Let nVar = 10
    а можно еще проще:
    nVar = 10

    Здесь не путайте знак равенства с оператором равенства. Последнее выражение означает "присвоить переменной nVar значение 10", а если строка выглядит так: If (nVar = 10) , то это значит "если значение переменной nVar равно 10".

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

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

    Операторы сравнения всегда возвращают True (если утверждение истинно) или False (если утверждение ложно).

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

    • And - логическое И. Должны быть истинными оба условия;
    • Or - логическое ИЛИ. Должно быть истинным хотя бы одно из условий;
    • Not - логическое отрицание. Возвращает True, если условие ложно;
    • Xor - логическое исключение. В выражении E1 Xor E2 возвращает True, если только E1 = True или только E2 = True, иначе - False;
    • Eqv - эквивалентность двух выражений, возвращает True, если они имеют одинаковое значение;
    • Imp - импликация, E1 Imp E2 возвращает False, если E1 = True и E2 = False, иначе - True.

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

    Переменные - это контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе - вы сдаете в гардероб какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы "предъявляете номерок" и получаете их.

    Каждая переменная имеет имя. Обращение к переменной происходит по имени. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции, процедуры и т. п.):

    • имя должно начинаться с буквы;
    • не должно содержать пробелов и символов пунктуации (исключение - символ подчеркивания);
    • максимальная длина - 255 символов;
    • должно быть уникальным в текущей области видимости
    • зарезервированные слова (те, которые подсвечиваются синим цветом в окне редактора кода) использовать нельзя.

    При создании программ VBA рекомендуется определиться с правилами, по которым будут присваиваться имена объектам - соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):

    • имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
      str (или s) - String, символьное значение;
      fn (или f) - функция;
      sub - процедура;
      c (или все буквы имени заглавные) - константа (контейнер для хранения данных, которые, в отличие от переменных, не изменяются в ходе выполнения VBA-программы);
      b - Boolean, логическое значение (True или False);
      d - дата;
      obj (или o) - ссылка на объект;
      n - числовое значение;
    • имена функций, методов и каждое слово в составном слове должно начинаться с заглавной буквы:
      MsgBox objMyDocument.Name
      Sub CheckDateSub()

    Тип данных относят к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать величина (переменная или константа), и множество действий, которые можно выполнить с этой величиной.

    2. Основные типы данных VBA

    В VBA предусмотрены следующие типы данных:

    • числовые:
      Byte - целое число от 0 до 255, для хранения нужен 1 байт памяти ;
      Integer - целое число от −32 768 до 32 767, 2 байта ;
      Long - большое целое число от −2 147 483 648 до 2 147 483 647, 4 байта ;
      Currency (денежный) - большое десятичное число с 19 позициями, включая 4 позиции после запятой
      (от –922337203685477,5808 до 922337203685477,5807), 4 байта ,
      используется для хранения чисел, когда точность крайне важна, что бывает при вычислениях с денежными единицами;
      Decimal - еще большее десятичное число с 29 позициями (после запятой можно использовать от 0 до 28 позиций), 8 байт ;
      Single и Double - значения с плавающей запятой (4 и 8 байт )
      (от -3.402823·10 38 до -1.401298·10 -45 для отрицательных значений и
      от 1.401298·10 -45 до 3.402823·10 38 для положительных значений для Single, и
      от -1.79769313486232·10 308 до -4.94065645841247·10 -324 для отрицательных значений и
      от 4.94065645841247·10 -324 до 1.79769313486232·10 308 для положительных значений для Double);
    • строковые (String переменной длины (примерно до 2 млрд символов) и фиксированной длины (примерно до 65 400 символов));
    • дата и время (Date - от 01.01.100 до 31.12.9999), 8 байт ;
    • логический (Boolean - может хранить только значения True и False), 2 байта ;
    • объектный (Object - хранит ссылку на любой объект в памяти);
    • Variant - специальный тип данных, который может хранить любые типы данных, 16 байт +1
    Обозначения типов данных является ключевыми словами языка (и выделяется после набора в редакторе VBA). Над различными типами данных допустимы различные операции. В VBA имеются три основных типа операций:
    • математические, выполняются над числами, их результатом являются числа;
    • операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
    • логические, используются в логических выражениях и их результатом являются логические значения.

    3. Приоритеты операций

    Приоритет Операция
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Вызов функции и скобки
    ^
    - (смена знака)
    *, /
    \
    Mod
    +, –
    >, <, >=, <=, <>, =
    Not
    And
    Or
    Xor

    4. Математические функции

    Функция Возвращаемое значение
    Abs (<число>) Модуль (абсолютная величина) числа
    Atn (<число>) Арктангенс
    Cos (<число>) Косинус
    Exp (<число>) Экспонента, т. е. результат возведения основания натурального логарифма в указанную степень
    Log(<число>) Натуральный логарифм
    Rnd (<число>) Случайное число из интервала

    Если условие истинно, то выполняются операторы1, в противном случае выполняются операторы2.

    Допускается также использование сложного условного оператора, который записывается в виде блока:

    If условие1 Then

    операторы1

    ElseIf условие2 Then

    операторы2

    операторы3

    Фамилия=.TextBox1.Text

    If Фамилия =”“ Then MsgBox”Вы не ввели фамилию”

    REM При установленном флажке номер 1 клиенту ‘предоставляется скидка 5%

    ‘ Сумма – количество денег, выплачиваемых клиентом

    ‘ Стоимость товара хранится в переменной Стоимость

    If UserForm1.CheckBox1.Value = True Then

    Сумма=Стоимость-Стоимость*0.05

    Else Cумма=Стоимость

    1) REM Предположим, что Тариф – это установленный тариф, а Время ‘–отработанное время. Время и тариф вводятся в поля ввода ‘соответственно вTextBox1 и TextBox2. Зарплата рассчитывается по ‘формуле Тариф*Время. Напишем программу для вывода в форму ‘рассчитанной зарплаты. Label4 – надпись, подготовленная для ‘вывода значения зарплаты

    If IsNumeric(TextBox1.Text)=True And _

    IsNumeric(TextBox2.Text)=True Then

    Тариф=TextBox1.Text

    Время=TextBox2.Text

    Label4.Caption=Тариф*Время

    В первом примере работа ведется с пользовательской формой номер один. Переменной Фамилия присваивается содержимое поля ввода номер один. Затем осуществляется проверка, было ли что-либо введено в поле ввода (не пуста ли переменная Фамилия ). Если переменная Фамилия пуста, то на экран выводится окно сообщения.

    Во втором примере – первые строки, начинающиеся со слова REM и апострофов, – это комментарии, объясняющие назначения переменных. С помощью условного оператора определяется сумма, выплачиваемая клиентом.

    В третьем примере осуществляется проверка того, введены ли в поля ввода числа. Если в два поля введены числа, то переменным присваиваются значения полей ввода и надписи присваивается значение результата умножения тарифа на время.

    1) Оператор безусловного перехода GoTo предназначен для задания перехода на указанную строку внутри программы.

    Синтаксис:

    GoTo Строка

    Обязательный аргумент Строка может быть любой меткой строки или номером строки.

    If IsNumeric(TextBox1.Text)=False Then GoTo Ошибка

    Ошибка: MsgBox “Ошибка при вводе чисел!”

    В приведенном примере выполняется проверка того, введено ли число в поле ввода номер один. Если введено не число, то осуществляется переход на строку с меткой Ошибка и на экран выводится сообщение.

    2) Оператор цикла For/To/Next предназначен для программирования повторяющихся фрагментов, т.е. для описания циклических алгоритмов.

    Синтаксис:

    For переменная=M1 To M2 [Step M3]

    операторы

    M1, M2, M3 – выражения. Оператор цикла повторяет выполнение группы операторов, пока переменная (счетчик) изменяется от начального значения М1 до конечного М2 с указанным шагом М3. Если шаг не указан, то он полагается равным 1.

    Фамилия = Sheets(“Сотрудники”).Cells(I,1)

    UserForm1.ComboBox1.AddItem Фамилия

    В приведенном примере предполагается, что на листе «Cотрудники» в первом столбце записаны фамилии сотрудников, которые нужно внести в список поля со списком номер один пользовательской формы номер один. Алгоритм работы программы:

    1) Переменной I присваивается значение 2.

    2) Переменной Фамилия присваивается значение ячейки А(I,1), расположенной на листе «Сотрудники». (При первом выполнении цикла это ячейка А(2,1))

    3) В список поля со списком ComboBox1 добавляется элемент из переменной Фамилия.

    4) К значению переменной I добавляется 1 (если шаг не указан, то он полагается равным 1). Выполняется проверка, не превысила ли величина I 10 (конечного значения переменной I, в примере М3=10)? Если величина I еще меньше или равна 10, то выполняются пункты 2-4, в противном случае работа цикла заканчивается.

    Таким образом, приведенная программа позволяет заполнить данными список поля со списком ComboBox1.

    Основные алгоритмы, используемые при решении
    экономических задач

    Основные алгоритмы рассмотрим на следующем примере. В выполнении работы по договору участвовали сотрудники разных отделов. В таблице, на листе «Лист1» представлены данные о количестве отработанных часов каждым из сотрудников (рис.8).


    Рис.8.Данные о количестве отработанных часов

    сотрудниками фирмы