Домой / Доступ / Vba оператор выбора if then примеры использования. Конструкции управления Visual Basic. вложенные операторы if

Vba оператор выбора if then примеры использования. Конструкции управления Visual Basic. вложенные операторы if

В Visual Basic for Application (VBA) существует несколько способов изменения порядка выполнения инструкций. Управляющие структуры VBA во многом схожи с подобными структурами в других языках программирования.

Основные управляющие структуры VBA:

  • If Then Else "End If
  • For Next
  • While Wend
  • Do Loop
  • Select Case "End Select
  • For Each Next

    Управляющая инструкция If Then Else "End If
    Эта инструкция изменяет порядок выполнения инструкций в зависимости от результатов проверки заданного условия (или набора условий)

    Пример:

    Sub TestIfThen()

    iData = "pashulka"

    If iData = "Excel" Then
    MsgBox "Этого сообщения Вы не увидите никогда!!!"
    ElseIf iData = "Office" Then
    MsgBox "К сожалению, этого сообщения Вы тоже не увидите!!!"
    Else
    MsgBox "Это сообщение появится в любом случае",iData
    End If

    Комментарии:
    If - ключевое слово, означающее начало проверки
    iData - переменная, значение которой будет проверяться
    Then - ключевое слово, означающее конец проверки
    MsgBox - сообщение
    ElseIf - ключевое слово, означающее начало новой проверки
    Then - ключевое слово, означающее конец дополнительной проверки
    MsgBox - сообщение
    Else - ключевое слово, означающее конец блока инструкций, выполняемых при положительном результате проверки, и начало блока инструкций, выполняемых при отрицательном результате.
    MsgBox - сообщение
    End If

    В инструкции If Then Else "End If ключевые слова ElseIf и Else являются необязательными.

    Управляющая инструкция For Next
    Эта инструкция позволяет выполнять определённые действия нужное количество раз. Такие инструкции, как правило, называют циклами.

    Пример:

    Sub TestForNext()

    For iCount = 1 To 100 Step 2
    i = i + 1
    Next

    Комментарии:
    For
    iCount - переменная, определяющая число повторений цикла.
    1 - начальное значение счётчика
    To - ключевое слово, разделяющее начальное и конечное значение счётчика
    100 - конечное значение счётчика
    Step - ключевое слово, определяющее шаг счётчика
    2 - шаг счётчика (число)
    Next - ключевое слово, при достижении которого значение счётчика изменяется на величину шага, после чего управление опять переходит в начало цикла.
    MsgBox

    В инструкции For Next ключевое слово Step является необязательным. При его отсутствии, шаг выполнения счётчика будет равен 1.

    важно Шаг счётчика обязательно должен быть числом. Если шаг счётчика указан в виде отрицательного числа, то тогда значение счётчика будет с каждым циклом будет уменьшаться.

    Пример, с обратным отсчётом:

    Sub TestForNext2()

    For iCount = 300 To 1 Step -3
    i = i + 1
    If iCount = 153 Then Exit For
    Next iCount

    MsgBox "Число повторений: " & i

    Обратите внимание на:
    If iCount = 153 Then - в этом VBA коде мы применили уже известную нам инструкцию If Then Else
    Exit For
    Next iCount - в коде присутствует переменная (счётчик), который располагается после ключевого слова. Подобный синтаксис используется, как правило, для визуального определения конца цикла, если в VBA коде присутствует достаточно много подобных инструкций.

    Управляющая инструкция While Wend
    Эта инструкция позволяет выполнять определённые действия до тех пор, пока соблюдается заданное условие.

    Пример:

    Sub TestWhileWend()

    While iCount iCount = iCount + 1
    Wend

    Комментарии:
    While - ключевое слово, означающее начало цикла
    iCount - условие, при соблюдении которого будет выполняться эта инструкция
    Wend
    MsgBox - сообщение о количестве повторений

    Управляющая инструкция Do Loop
    Эта инструкция позволяет выполнять определённые действия не только до тех пор, пока соблюдается заданное условие, но и наиборот, пока не будет выполнено заданное условие.

    Пример:

    Sub TestDoLoop()

    Do Until iCount >= 100
    iCount = iCount + 1
    Loop

    MsgBox "Число повторений: " & iCount

    Комментарии:
    Do - ключевое слово, означающее начало цикла
    Until - ключевое слово, означающее наличие условия
    iCount >= 100 - условие, при соблюдении которого будет выполняться эта инструкция
    Loop - ключевое слово, означающее конец цикла
    MsgBox - сообщение о количестве повторений

    Sub TestDoLoop2()

    Do
    iCount = iCount + 1
    If iCount = 50 Then Exit Do
    Loop Until iCount = 100

    MsgBox "Число повторений: " & iCount

    Обратите внимание на:
    If iCount = 50 Then - в этом VBA коде мы опять применили уже известную нам инструкцию If Then Else
    Exit Do - инструкция означающая досрочный выход из цикла
    iCount = 100 - условие, при соблюдении которого будет выполняться эта инструкция

    Примечание:
    Условие заданное в конце цикла гарантирует, что он будет выполнен хотя бы один раз. Будьте осторожны с инструкциями While Wend, Do Loop, так как при некорректном задании условия, Вы можете получить практически perpetuum mobile.

    Управляющая инструкция Select Case "End Select
    Эта инструкция в зависимости от результатов значения переменной или выражения выполняет один из нескольких фрагментов кода.

    Пример:

    Sub TestSelectCase()

    Select Case iNumeric
    Case 1

    Case 2, 5
    MsgBox "Это сообщение Вы не должны увидеть"
    Case 10 To 13
    MsgBox "Это сообщение Вы не должны увидеть"
    Case Is > 14
    MsgBox "Именно это сообщение Вы и должны увидеть"
    Case Else
    MsgBox "Это сообщение появится, если переменная будет End Select

    Комментарии:
    Select Case
    iNumeric - переменная или выражение, значение которой определяет выбор фрагмента VBA кода для выполнения
    Case 1 - первый вариант значения для сравнения.
    Если значение переменной совпадёт с ним, то будет выполнен фрагмент кода следующий за Case, но до следующего ключевого Case, затем инструкция завершит свою работу. В противном случае проверка продолжится.
    Case 2, 5 - второй вариант значения.
    Case 10 To 13 - третий вариант значения.
    Case Is > 14 - четвёртый вариант значения.
    MsgBox - сообщение, которое будет выведено в данном случае
    Case Else - ключевые слова, означающее выполнение кода, если ни одно из предыдущих вариантов не совпало.
    End Select - ключевое слово, означающее конец инструкции

    В инструкции Select Case "End Select ключевое слово Case Else является необязательным.

    Управляющая инструкция For Each Next
    Эта инструкция позволяет выполнять определённые действия с каждым об"ектом семейства или элементом массива.

    Пример с об"ектом Range:

    Sub TestForEachNextRange()


    i = i + 1
    iCell.Value = "Ячейка # " & i
    Next

    MsgBox "Число ячеек: " & i

    Комментарии:
    For Each - ключевые слова, означающее начало инструкции
    iCell - переменная, которой присваиваются значения элементов группы (массива или семейства) Для работы с элементами массива переменная должна принадлежать к типу Variant.
    In - ключевое слово, отделяющее переменную от группы
    Range("A1:C5") - группа, т.е. массив или семейство об"ектов. Количество повторений цикла зависит от числа элементов, входящих в группу. При первом выполнении цикла переменной присваивается значение самого первого элемента группы, а затем, всех последующих.
    Next - ключевое слово, при достижении которого управление опять переходит в начало цикла.
    MsgBox - сообщение о количестве элементов группы.

    В данном случае использовать подобный подсчёт числа ячеек в об"екте Range является не лучшим способом, так как у этого об"екта существует свойство, которое справится с этой задачей гораздо лучше: Об"ект Range: его свойства и методы


  • Пример манипуляции с об"ектом Range:

    Sub TestForEachNextRangeChanges()

    For Each iCell In Range("A1:C5")

    i = i + 1: iCell.Value = i

    If iCell.Value 5 Then
    iCell.Font.Size = 15
    iCell.Interior.ColorIndex = 50
    ElseIf iCell.Value = 13 Or iCell.Value = 5 Then
    iCell.Font.Size = 20
    iCell.Interior.ColorIndex = 3
    Else
    iCell.Clear
    End If

    Обратите внимание на:
    - в этом VBA коде для проверки значений находящихся в ячейке мы применили уже известную нам инструкцию If Then Else.
    - в зависимости от того какое условие прошло проверку, выполняется определённый фрагмент кода, который использует различные свойства об"екта Range.

    Пример с семейством WorkSheets:

    Sub TestForEachNextSheet()

    For Each iList In Worksheets
    i = i + 1
    iNameList = iNameList & Chr(10) & iList.Name
    Next

    MsgBox "Число рабочих листов: " & i & Chr(10) & _
    "Имена рабочих листов: " & iNameList

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

    Основные операторы языка VBA

    Комментарии (0)

    3.1. Правила записи операторов

    При записи операторов необходимо придерживаться следующих правил:

    Каждый новый оператор записывается с новой строки.

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

    Если оператор не помещается в одной строке, то необходимо поставить в конце строки пробел и знак подчеркивания (_), а затем продолжить не поместившуюся часть на следующей строке.

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

    Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:

    ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ

    Сначала вычисляется выражение в правой части, а затем результат присваивается переменной, стоящей в левой части.

    Например . Записать с помощью оператора присваивания следующее математическое выражение:

    На VВА это выражение можно записать в виде следующего оператора:

    Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

    3 .3. Операторы ввода-вывода

    3 .3.1. Оператор и функция MsgBox

    Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.

    Он имеет следующий синтаксис:

    MsgBox Сообщение[,Кнопки][, Заголовок]

    Аргументы:

    Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации.

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

    Заголовок - задает заголовок окна.

    Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.

    Таблица 3.1. Допустимые значения переменной кнопки

    Отображение

    Аргумент

    Кнопка ОК

    Кнопки ОК и Отмена

    Кнопки Да и Нет

    Кнопки Да, Нет и Отмена

    Кнопки Прекратить, Повторить и Игнорировать

    VbAbortRetryIgnore

    Кнопки Повторить и Отмена.

    Информационный знак

    Знак вопроса

    Знак восклицания

    Например . Вывести сообщение о текущей дате.

    MsgBox "Сегодня на календаре" & Date , "Внимание"

    В результате будет выведено следующее окно (рис.3.1).

    После щелчка по кнопке ОК окно сообщения закроется, и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом MsgBox.

    3.3.2. Функция InputBox

    Функция InputBox осуществляет ввод значений переменных с помощью окна ввода и имеет следующий синтаксис:

    Имя_Переменной = InputBox(Сообщение[, Заголовок ] )

    Аргументы:

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

    Заголовок - задает заголовок окна.

    Например , Ввести значение переменной N с клавиатуры, предусмотрев значение по умолчанию равное 10.

    Для этого можно использовать следующий оператор:

    N = InputBox("Введите N", "Ввод исходных данных",10)

    В результате будет выведено следующее окно для ввода значения переменной N (рис.3.2).

    Если значение по умолчанию подходит пользователю, то после щелчка кнопки ОК окно ввода закроется, переменной N присвоится значение 10 и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом InputBox .

    Если же значение по умолчанию не подходит пользователю, то перед щелчком по кнопке ОК необходимо ввести нужное значение переменной N.

    3 .4. Условный оператор IF

    Для реализации разветвляющегося вычислительного процесса в VBA используется оператор If…Then…Else, который представляет собой простейшую форму проверки условий. Он имеет следующий синтаксис:

    If УСЛОВИЕ Then ОПЕРАТОР_1 E lse ОПЕРАТОР_2

    ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2 . При этом оператор If…Then…Else записывается в одну строку.

    УСЛОВИЕ - это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.

    Таблица 3 .2. Логические отношения

    Операция

    Название

    Выражение

    Результат

    True, если А равно В

    True, если А не равно В

    True, если А,больше В

    True, если А меньше В

    Больше или равно

    True, если А больше или равно В

    Меньше или равно

    True, если А меньше или равно В

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

    Таблица 3 .3. Логические операции

    Название

    Выражение

    Результат

    Логическое
    отрицание

    Логическое И

    Логическое ИЛИ

    В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:

    If УСЛОВИЕ Then

    БЛОК_ОПЕРАТОРОВ_1

    БЛОК_ОПЕРАТОРОВ_2

    End I f

    В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:

    If УСЛОВИЕ_1 Then

    БЛОК_ОПЕРАТОРОВ_1

    ElseIf УСЛОВИЕ_2 Then

    БЛОК_ОПЕРАТОРОВ_2

    Else

    End If

    Пример 1 . Написать часть программы для алгоритма на рис. 3.3.

    Пример 2. Написать часть программы для алгоритма на рис. 3.4.

    3.5. Оператор выбора Select Case

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

    Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ

    Case ЗНАЧЕНИЯ_1

    ОПЕРАТОРЫ_1

    Case ЗНАЧЕНИЯ _ 2

    ОПЕРАТОРЫ _ 2

    . . .

    Case ЗНАЧЕНИЯ_N

    ОПЕРАТОРЫ _N

    [ Case Else

    ИНАЧЕ _ ОПЕРАТОРЫ]

    End Select

    ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.

    Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ .

    Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ . Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ОПЕРАТОРЫ_I End Select . Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select

    Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.

    3.6. Операторы цикла

    Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next , который имеет следующий синтаксис:

    For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Т o КОН_ЗНАЧЕНИЕ Step ШАГ

    БЛОК_ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    Next СЧЕТЧИК

    Цикл For…Next перебирает значения переменной СЧЕТЧИК , которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*

    Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next .

    For Each Элемент In Группа

    БЛОК _ ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    Next Элемент

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

    циклы с предусловием - Do While Loop ,

    Do Until Loop ;

    циклы с постусловием - Do Loop While ,

    Do Loop Until .

    Ниже приведен синтаксис этих операторов цикла:

    " Цикл с предусловием Do While Loop

    Do While УСЛОВИЕ

    БЛОК_ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    " Цикл с предусловием Do Until Loop

    Do Until УСЛОВИЕ

    БЛОК_ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    " Цикл с постусловием Do Loop While

    БЛОК _ ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    Loop While УСЛОВИЕ

    " Цикл с постусловием Do Loop Until

    БЛОК _ ОПЕРАТОРОВ

    БЛОК_ОПЕРАТОРОВ

    Loop Until УСЛОВИЕ

    Оператор Do W hile…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



    Другие новости

    Наиболее важные операторы условия, используемые в Excel VBA – это операторы If … Then и Select Case . Оба этих выражения проверяют одно или несколько условий и, в зависимости от результата, выполнят различные действия. Далее мы поговорим об этих двух операторах условия подробнее.

    Оператор «If … Then» в Visual Basic

    Оператор If … Then проверяет условие и, если оно истинно (TRUE), то выполняется заданный набор действий. Также может быть определён набор действий, которые должны быть выполнены, если условие ложно (FALSE).

    Синтаксис оператора If … Then вот такой:

    If Условие1 Then
    Действия в случае, если выполняется Условие1
    ElseIf Условие2 Then
    Действия в случае, если выполняется Условие2
    Else
    Действия в случае, если не выполнено ни одно из Условий
    End If

    В этом выражении элементы ElseIf и Else оператора условия могут не использоваться, если в них нет необходимости.

    Ниже приведён пример, в котором при помощи оператора If … Then цвет заливки активной ячейки изменяется в зависимости от находящегося в ней значения:

    If ActiveCell.Value < 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If

    Обратите внимание, что как только условие становится истинным, выполнение условного оператора прерывается. Следовательно, если значение переменной ActiveCell меньше 5, то истинным становится первое условие и ячейка окрашивается в зелёный цвет. После этого выполнение оператора If … Then прерывается и остальные условия не проверяются.

    Оператор «Select Case» в Visual Basic

    Оператор Select Case схож с оператором If … Then в том, что он также проверяет истинность условия и, в зависимости от результата, выбирает один из вариантов действий.

    Синтаксис оператора Select Case вот такой:

    Select Case Выражение
    Case Значение1
    Действия в случае, если результат Выражения соответствует Значению1
    Case Значение2
    Действия в случае, если результат Выражения соответствует Значению2

    Case Else
    Действия в случае, если результат Выражения не соответствует ни одному из перечисленных вариантов Значения
    End Select

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

    В следующем примере при помощи конструкции Select Case изменяется цвет заливки текущей ячейки в зависимости от находящегося в ней значения:

    Select Case ActiveCell.Value Case Is <= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select

    В приведённом выше примере показано, как можно различными способами задать значение для элемента Case в конструкции Select Case . Вот эти способы:

    Case Is <= 5 Таким образом при помощи ключевого слова Case Is можно проверить, удовлетворяет ли значение Выражения условию вида <=5 .
    Case 6, 7, 8, 9 Так можно проверить, совпадает ли значение Выражения с одним из перечисленных значений. Перечисленные значения разделяются запятыми.
    Case 10 Так проверяется, совпадает ли значение Выражения с заданным значением.
    Case 11 To 20 Таким образом можно записать выражение для проверки, удовлетворяет ли значение Выражения условию вида от 11 до 20 (эквивалентно неравенству “11<=значение<=20”).
    Case Else Вот так, при помощи ключевого слова Else , указываются действия для того случая, если значение Выражения не соответствует ни одному из перечисленных вариантов Case .

    Как только одно из условий будет найдено, выполняются соответствующие действия и производится выход из конструкции Select Case . То есть в любом случае будет выполнена только одна из перечисленных ветвей Case .

    The IF function in VBA is one of the most frequently used of all statements. The IF function checks if the specified condition is being met or not. The IF function in VBA works in a slightly different manner from how it works in Excel. In Excel, the IF function does two things: It checks whether the given condition evaluates to TRUE or FALSE and then returns a value to use based on the evaluation i.e IF(condition, return_value_if_condition_true, return_value_if_condition_false ). However, the IF function in VBA does only the first part, i.e. check if the condition evaluates to TRUE or FALSE. The steps to take in either scenario as specified using the additional THEN statement.

    Using a simple IF function in VBA

    Here’s an example of the IF function . This piece of VBA code is simply checking whether the condition specified (i.e. 1 > 4) evaluates to TRUE or FALSE. In this case, we have only specified the steps to be completed when the condition evaluates to TRUE. In this case, the result will be a being displayed on the screen. If the function were to evaluate to FALSE, the VBA code will do nothing.

    1
    2
    3
    4
    5

    Sub IF_FUNCTION()
    If 7 > 1 Then
    MsgBox "7 is greater than 1"
    End If
    End Sub

    The THEN statement is essentially a directive indicating that the steps immediately following it are to be executed if the condition just before if evaluate to TRUE.

    The IF function typically ends with an END IF declaration which lets the application know that it is the last line of the IF function. Given below is a slightly shorter form of the IF function. Note that the END IF statement has been eliminated in this and thus three lines of code has been merged into one.

    Sub IF_FUNCTION_SHORT()
    If 7 > 1 Then MsgBox "7 is greater than 1"
    End Sub

    However this form should be used only when there are no ELSE or ELSE IF statements are needed. Let’s look at what they are and how they help enhance the IF function.

    Using a IF function with ELSE in VBA

    In the example given above, we saw that the IF function would be able to carry out steps only if the condition evaluated to TRUE. But what if we wanted to specify the steps to be carried out when either of the conditions were met. One way to achieve branching out of an IF function is to use the ELSE statement. Simply put, the ELSE statement causes the application to execute the steps mentioned in the ELSE block when the condition specified in the IF clause evaluates to FALSE.

    In the VBA code example below, the condition in the IF function evaluates to false, the steps mentioned in the ELSE block are executed with the result that the message “1 is less than 4” gets displayed on the screen. Multiple steps can be added to the block to have them all execute one after another.

    1
    2
    3
    4
    5
    6
    7

    Sub IF_ELSEIF_FUNCTION()
    If 1 > 4 Then

    Else :
    MsgBox "1 is less than 4"
    End If
    End Sub

    Using a IF function with ELSEIF and ELSE: in VBA

    The ELSE statement may be supported by ELSEIF statements. They are typically used to check for specific conditions and if all of them evaluate to FALSE, the steps specified in the ELSE condition will finally get executed. The IF statement will check for a given condition. If that condition turns out to be FALSE, the condition specified in the first ELSEIF statement will be checked. If that also turns out to be FALSE, the condition specified in the second ELSEIF statement will be checked, and so on and so forth. If all conditions specified in the IF and ELSEIF statements turn out to be FALSE, by default the steps mentioned under the final ELSE: block will get executed. Please remember that if there are multiple ELSEIF statements, the first one that evaluates to TRUE will get executed and once completed, the code execution will move to the END IF statement. Even if there are multiple ELSEIF conditions that evaluate to TRUE, only the first one that evaluates to TRUE will be executed.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11


    If < > Then
    MsgBox "1 is greater than 4"
    ElseIf < > Then

    ElseIf < > Then

    Else < >:

    End If
    End Sub

    In the example shown below, the IF condition is checked first. Since it evaluates to FALSE, the first ELSEIF condition is evaluated, followed by the second. Since none of them evaluate to TRUE, the steps mentioned in the ELSE: condition are executed.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    Sub IF_ELSEIF_ELSE_FUNCTION()
    If 1 > 4 Then
    MsgBox "1 is greater than 4"
    ElseIf 2 > 4 Then
    MsgBox "2 is greater than 4"
    ElseIf 3 > 4 Then
    MsgBox "3 is greater than 4"
    Else :
    MsgBox "1, 2 or 3 are lesser than 4"
    End If
    End Sub

    Quick Tip – How to make IF statements work faster

    Both the pieces of code appear similar. The two ELSEIF conditions in the second function have been swapped. Which one of the following pieces of VBA code do you think executes faster?:
    End If
    Next i
    MsgBox Timer - t
    End Sub

    The answer is that the second one executes much faster than the first. Why? Because the second one needs to application to go through lesser lines of code before it finds a condition that evaluates to TRUE. Remember that the first ELSEIF condition that if found TRUE gets executed and none of the other conditions are evaluated, even if they were to also evaluate to TRUE. In the first piece of the VBA code, the ELSEIF function on line 6 evaluates to TRUE while in the second, line 5 meets the criteria. In essence, the more likely the condition is to get evaluated to TRUE, the earlier it should be placed in the VBA code, all else being the same.

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

    VBA поддерживает следующие конструкции принятия решений:

    If . . . Then . . . Else

    6.1 Конструкция If . . . Then

    Конструкция If . . . Then применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис этой конструкции позволяет задавать ее в одной строке или в нескольких строках программы:

    If условие Then выражение If условие Then выражение End If

    Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then. Для условного выполнения одного оператора можно использовать как синтаксис для одной строки, так и синтаксис для нескольких строк (блоковую конструкцию).

    Следующие два оператора эквивалентны:

    If anyDate < Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

    Заметим, что синтаксис оператора If . . . Then для одной строки не использует оператор End If. Чтобы выполнить последовательность операторов, если условие истинно, следует использовать блоковую конструкцию If . . . Then . . . End If.

    If anyDate < Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

    Если условие ложно, то операторы после ключевого слова Then не выполняется, а управление передается на следующую строку (или строку после оператора End If в блочной конструкции).

    6.2 Конструкция If . . . Then . . . Else

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

    If условие1 Then выражение1 ElseIf условие2 Then выражение2 . . . Else выражение-n End If

    При выполнении сначала проверяется условие1. Если оно ложно, VBA проверяет следующее условие2 и т. д., пока не найдет истинного условия. Найдя его, VBA выполняет соответствующий блок операторов и затем передает управление инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который VBA выполняет, если не выполнено ни одно из условий.

    Конструкция If . . . Then . . . ElseIf в действительности всего лишь специальный случай конструкции If . . . Then . . . Else. Заметим, что в данной конструкции может быть любое число блоков ElseIf, или даже ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf.

    Sub пример1() Dim a As Single, b As Single, x As Single Dim z As Double Call read("A1", a) Call read("B1", b) Let x = CSng(InputBox("введи x", "Ввод данных", 0)) If x <= a Then z = Sin(x) ElseIf x >= b Then z = Tan(x) Else: z = Cos(x) End If Call out("C1", z) End Sub

    Заметим, что можно добавить любое число блоков Elself в конструкцию If . . . Then. Однако количество блоков Elself может стать настолько большим, что конструкция If . . . Then станет очень громоздкой и неудобной. В подобной ситуации следует применять другую конструкцию принятия решения - Select Case.

    6.3 Конструкция Select Case

    Конструкция Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора.

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

    Select Case проверяемое_выражение ] ] . . . ] End Select

    Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case.

    Рассмотрим пример вычисления функции

    Sub пример2() Const pi2 = 1.57 Dim x As Single Dim z As Double Let x = CSng(InputBox("введи x", "Ввод данных", 0)) Select Case x Case -pi2 z = Sin(x) Case 0 z = Cos(x) Case pi2 z = Tan(x) Case Else MsgBox "Неверные исходные данные!" Exit Sub End Select Call out("D1", z) End Sub

    Заметим, что конструкция Select Case вычисляет выражение только один раз при входе в нее, а в конструкции If . . . Then . . . Else вычисляются различные выражения для каждого оператора Elself. Конструкцию If . . . Then . . . Else можно заменить конструкцией Select Case, только если оператор If и каждый оператор Elself вычисляют одно и то же выражение.