Перейти к содержимому

VBA Excel. Оператор If…Then…Else и функция IIf

Однострочная и многострочная конструкции оператора If...Then...Else и функция IIf, используемые в коде VBA Excel - синтаксис, компоненты, примеры.

  1. Оператор If...Then...Else
  2. Функция IIf

Оператор If...Then...Else

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

Однострочная конструкция

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

Синтаксис однострочной конструкции If...Then...

If [условие] Then [операторы]

Компоненты однострочной конструкции If...Then...

  • условие - числовое или строковое выражение, возвращающее логическое значение True или False;
  • операторы - блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;

Если компонент условие возвращает значение False, блок операторов конструкции If...Then... пропускается и управление программой передается следующей строке кода.

Пример 1

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

If [условие] Then
[операторы]
ElseIf [условие] Then
[операторы]
----------------
Else
[операторы]
End If

Компоненты многострочной конструкции If...Then...Else:

  • условие - числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
  • операторы - блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.
  • пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы];
  • блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен.

Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If...Then...Else пропускается и управление программой передается следующей строке кода.

Самый простой вариант многострочной конструкции If...Then...Else:

If [условие] Then
[операторы]
Else
[операторы]
End If

Пример 2

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 проверяет заданное условие и возвращает значение в зависимости от результата проверки.

Синтаксис функции

IIf([условие], [если True], [если False])

Компоненты функции IIf

  • условие - числовое или строковое выражение, возвращающее логическое значение True или False;
  • если True - значение, которое возвращает функция IIf, если условие возвратило значение True;
  • если False - значение, которое возвращает функция IIf, если условие возвратило значение False.

Пример 3

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.

VBA Excel. Оператор If…Then…Else и функция IIf: 4 комментария

  1. Александр

    при ElseIf после Then выражение должно быть обязательно с новой строки

  2. Евгений (автор статьи)

    Спасибо, Александр!
    Я изменил некоторые формулировки в статье, допускающие неоднозначное толкование. Кроме того, я решил проверить, что будет, если поместить при ElseIf выражение после Then, и вот что получилось:

    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
    

    Код работает! Но он не будет работать, если строки

       If d < 11 Then
       a = "Число " & d & " входит в первую десятку"
    

    заменить на строку

       If d < 11 Then a = "Число " & d & " входит в первую десятку"
    

    или на строку

       If d < 11 Then: a = "Число " & d & " входит в первую десятку"
    
  3. Михаил

    Конструкция:
    if (condition)
    then (action 1)
    else (action 2)
    Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?

    1. Евгений (автор статьи)

      Привет, Михаил!
      Условие в вашей конструкции проверяется один раз:

      Sub Test1()
      Dim x As Integer
      x = 1
        If x < 3 Then
          x = 5
        Else
          x = 10
        End If
      MsgBox x
      End Sub
      

      И даже если в конструкции используется блок ElseIf ... Then, для проверки условия используется первоначальное значение:

      Sub Test2()
      Dim x As Integer
      x = 1
        If x < 3 Then
          x = 5
        ElseIf x > 3 Then
          x = 10
      End If
      MsgBox x
      End Sub
      

      В обоих случаях MsgBox выведет число 5.

Добавить комментарий

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