Конструкция If Then является широко используемым инструментом в программировании на VBA. Она позволяет приложениям принимать решения на основе заданных условий, что является ключевым элементом для создания эффективных программ. Успешный макрос Excel, по сути, сводится к принятию правильных решений и выполнению соответствующих действий.
If Then используется для выполнения одного или нескольких операторов при выполнении заданного условия. Оператор Else необязателен и позволяет выполнять одну или более инструкций в случае несоблюдения условия.
Давайте рассмотрим пример, связанный с управлением временными данными, используя VBA. VBA работает с системой дат и времени, аналогичной той, что используется в Excel. Время дня представлено дробным числом, где полдень равен 0.5. Функция VBA Time возвращает текущее системное время в формате часов. В следующем примере будет отображено сообщение, если текущее время меньше полудня. В противном случае процедура завершится без выполнения дополнительных действий.
Sub GreetMe1()
If Time < 0.5 Then MsgBox "Доброе утро!"
End Sub
Этот код можно разбить на несколько строк для более читаемости:
Sub GreetMe1a()
If Time < 0.5 Then
MsgBox "Доброе утро!"
End If
End Sub
Заметьте, что каждой инструкции If соответствует инструкция End If. В данном примере выполняется только один оператор, если условие истинно. Между If и End If можно вставить любое количество операторов.
Если требуется отобразить другое приветствие во второй половине дня, можно добавить еще одну конструкцию If Then:
Sub GreetMe2()
If Time < 0.5 Then
MsgBox "Доброе утро!"
End If
If Time >= 0.5 Then
MsgBox "Добрый день!"
End If
End Sub
Обратите внимание на использование оператора >= (больше или равно) во второй конструкции If Then, что учитывает случай полудня (12:00).
Для использования ветви Else конструкции If Then можно сделать следующим образом:
Sub GreetMe3()
If Time < 0.5 Then
MsgBox "Доброе утро!"
Else
MsgBox "Добрый день!"
End If
End Sub
Обратите внимание на использование символа продолжения строки в этом примере. If Then Else фактически является одной инструкцией.
Если необходимо выполнить несколько операторов на основе одного условия, можно воспользоваться следующим кодом:
Sub GreetMe3a()
If Time < 0.5 Then
MsgBox "Доброе утро!"
' Здесь вводятся другие операторы
Else
MsgBox "Добрый день!"
' Здесь вводятся другие операторы
End If
End Sub
Если нужно обработать три условия (например, утро, день и вечер), можно использовать либо три блока If Then, либо вложенную конструкцию If Then Else. Первый вариант более прост:
Sub GreetMe4()
If Time < 0.5 Then
MsgBox "Доброе утро!"
End If
If Time >= 0.5 And Time < 0.75 Then
MsgBox "Добрый день!"
End If
If Time >= 0.75 Then
MsgBox "Добрый вечер!"
End If
End Sub
Значение 0.75 представляет время 18:00, когда день переходит в вечер.
В предыдущих примерах каждая инструкция в процедуре выполняется, даже если первое условие (утро) выполняется. Для оптимизации процедуры можно добавить инструкцию, которая завершает процедуру после выполнения какого-либо условия. Это особенно полезно в более сложных приложениях:
If условие Then
[инструкции истина]
[ElseIf условие-n Then
[инструкции альтернатива]]
[Else
[операторы по умолчанию]]
End If
Данный синтаксис можно применить в процедуре GreetMe5:
Sub GreetMe5()
If Time < 0.5 Then
MsgBox "Доброе утро!"
ElseIf Time >= 0.5 And Time < 0.75 Then
MsgBox "Добрый день!"
Else
MsgBox "Добрый вечер!"
End If
End Sub
Если условие истинно, то выполняются соответствующие операторы, и происходит выход из конструкции If Then. Такой синтаксис может быть более эффективным, но может показаться сложным для понимания.
Еще одним способом реализации является использование вложенных конструкций If Then Else (без Else If). Это простой и понятный способ:
Sub GreetMe6()
If Time < 0.5 Then
MsgBox "Доброе утро!"
Else
If Time >= 0.5 And Time < 0.75 Then
MsgBox "Добрый день!"
Else
MsgBox "Добрый вечер!"
End If
End If
End Sub
В этом коде каждой инструкции If соответствует своя инструкция End If.
Вот еще один пример, использующий простой синтаксис конструкции If Then. Процедура запрашивает у пользователя значение переменной Quantity (Количество) и отображает скидку на основе этого значения. Если пользователь нажимает "Отмена" в окне InputBox, то переменной Quantity присваивается пустая строка, и процедура завершается. Обратите внимание, что в данной процедуре не проводятся дополнительные проверки (например, на отрицательное значение):
Sub Discount1()
Dim Quantity As Variant
Dim Discount As Double
Quantity = InputBox("Укажите количество: ")
If Quantity = "" Then Exit Sub
If Quantity >= 0 Then Discount = 0.1
If Quantity >= 25 Then Discount = 0.15
If Quantity >= 50 Then Discount = 0.2
If Quantity >= 75 Then Discount = 0.25
MsgBox "Скидка: " & Discount
End Sub
Обратите внимание, что каждая инструкция If Then в этой процедуре всегда выполняется, и значение переменной Discount может изменяться.
Та же процедура, переписанная с использованием альтернативного синтаксиса:
Sub Discount2()
Dim Quantity As Variant
Dim Discount As Double
Quantity = InputBox("Укажите количество: ")
If Quantity = "" Then Exit Sub
If Quantity >= 0 And Quantity < 25 Then
Discount = 0.1
ElseIf Quantity < 50 Then
Discount = 0.15
ElseIf Quantity < 75 Then
Discount = 0.2
Else
Discount = 0.25
End If
MsgBox "Скидка: " & Discount
End Sub
Эти примеры демонстрируют принципы использования конструкции If Then в VBA для принятия решений на основе заданных условий. Вы можете выбрать подход, который наиболее удобен и читаем для вашего конкретного случая.
В следующей статье рассмотрим конструкцию Select Case в VBA.