Найти в Дзене
VBA Excel с нуля

VBA Excel № 54. If Then в VBA.

Скриншот с моего нойтбука
Скриншот с моего нойтбука

Конструкция 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.