Однострочная и многострочная конструкции оператора If…Then…Else и функция IIf, используемые в коде VBA Excel – синтаксис, компоненты, примеры.
Оператор If…Then…Else
Оператор If…Then…Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.
Однострочная конструкция
Оператор If…Then…Else может использоваться в однострочной конструкции без ключевых слов Else, End If.
Синтаксис однострочной конструкции If…Then…
1 |
<strong>If</strong> [условие] <strong>Then</strong> [операторы] |
Компоненты однострочной конструкции If…Then…
- условие – числовое или строковое выражение, возвращающее логическое значение True или False;
- операторы – блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;
Если компонент условие возвращает значение False, блок операторов конструкции If…Then… пропускается и управление программой передается следующей строке кода.
Пример 1
1 2 3 4 5 6 |
Sub primer1() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 20", "Пример 1", 1) If d > 10 Then a = "Число " & d & " больше 10" MsgBox a End Sub |
Многострочная конструкция
Синтаксис многострочной конструкции If…Then…Else
1 2 3 4 5 6 7 8 |
<strong>If</strong> [условие] <strong>Then</strong> [операторы] <strong>ElseIf</strong> [условие] <strong>Then</strong> [операторы] ---------------- <strong>Else</strong> [операторы] <strong>End If</strong> |
Компоненты многострочной конструкции If…Then…Else:
- условие – числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
- операторы – блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.
- пунктирная линия обозначает дополнительные структурные блоки из строки
ElseIf [условие] Then
и строки[операторы]
; - блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки
Else
и строки[операторы]
не является обязательным и может быть пропущен.
Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.
Самый простой вариант многострочной конструкции If…Then…Else:
1 2 3 4 5 |
<strong>If</strong> [условие] <strong>Then</strong> [операторы] <strong>Else</strong> [операторы] <strong>End If</strong> |
Пример 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub primer2() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 40", "Пример 2", 1) If d < 11 Then a = "Число " & d & " входит в первую десятку" ElseIf d > 10 And d < 21 Then a = "Число " & d & " входит во вторую десятку" ElseIf d > 20 And d < 31 Then a = "Число " & d & " входит в третью десятку" Else a = "Число " & d & " входит в четвертую десятку" End If MsgBox a End Sub |
Функция IIf
Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.
Синтаксис функции
1 |
<strong>IIf</strong>([условие], [если True], [если False]) |
Компоненты функции IIf
- условие – числовое или строковое выражение, возвращающее логическое значение True или False;
- если True – значение, которое возвращает функция IIf, если условие возвратило значение True;
- если False – значение, которое возвращает функция IIf, если условие возвратило значение False.
Пример 3
1 2 3 4 5 6 7 |
Sub primer3() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 20", "Пример 3", 1) a = IIf(d < 10, d & " - число однозначное", _ d & " - число двузначное") MsgBox a End Sub |
При нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из примеров, генерируется ошибка, так как в этих случаях функция InputBox возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d.
при ElseIf после Then выражение должно быть обязательно с новой строки
Спасибо, Александр!
Я изменил некоторые формулировки в статье, допускающие неоднозначное толкование. Кроме того, я решил проверить, что будет, если поместить при ElseIf выражение после Then, и вот что получилось:
Код работает! Но он не будет работать, если строки
заменить на строку
или на строку
Конструкция:
if (condition)
then (action 1)
else (action 2)
Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?
Привет, Михаил!
Условие в вашей конструкции проверяется один раз:
И даже если в конструкции используется блок
ElseIf ... Then
, для проверки условия используется первоначальное значение:В обоих случаях MsgBox выведет число 5.
чем отличается однострочная и многострочная форма синтаксиса
Привет, Виктор!
Однострочная запись короче и работает только с одним условием.