Оператор 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 = «Число » » больше 10″
Excel VBA IF THEN Statement (with ELSEIF & Looping in cells)
Многострочная конструкция
Синтаксис многострочной конструкции If…Then…Else
If [ условие ] Then
ElseIf [ условие ] Then
Компоненты многострочной конструкции If…Then…Else:
- условие — числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
- операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;
- пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы] .
Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.
Самый простой вариант многострочной конструкции If…Then…Else:
If [ условие ] Then
Sub Primer2 ( )
Dim d As Integer , a As String
d = InputBox ( «Введите число от 1 до 40» , «Пример 2» , 1 )
If d < 11 Then
a = «Число » » входит в первую десятку»
ElseIf d > 10 And d < 21 Then
a = «Число » » входит во вторую десятку»
ElseIf d > 20 And d < 31 Then
a = «Число » » входит в третью десятку»
a = «Число » » входит в четвертую десятку»
Функция IIf
Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.
Синтаксис функции
IIf ( [ условие ] , [ если True ] , [ если False ] )
Компоненты функции IIf
- условие — числовое или строковое выражение, возвращающее логическое значение True или False;
- если True — значение, которое возвращает функция IIf, если условие возвратило значение True;
- если False — значение, которое возвращает функция IIf, если условие возвратило значение False.
Компоненты если True и если False могут быть выражениями, значения которых будут вычислены и возвращены.
Excel VBA — If Statement
Пример 3
Sub Primer3 ( )
Dim d As Integer , a As String
On Error Resume Next
d = InputBox ( «Введите число от 1 до 20 и нажмите OK» , «Пример 3″ , 1 )
If d > 20 Then GoTo Instr
a = IIf ( d < 10 , d — число однозначное» , d — число двузначное» )
Sub Primer4 ( )
On Error GoTo Instr
MsgBox IIf ( x = 10 , x + 5 , y + 10 )
MsgBox IIf ( x = 10 , x + 5 , y / 0 )
MsgBox «Произошла ошибка: » Введите число от 1 до 40″ , «Пример 2» , 1 )
If d < 11 Then
a = «Число » » входит в первую десятку»
ElseIf d > 10 And d < 21 Then a = «Число » » входит во вторую десятку»
ElseIf d > 20 And d < 31 Then a = «Число » » входит в третью десятку»
Else : a = «Число » » входит в четвертую десятку»
If d < 11 Then
a = «Число » » входит в первую десятку»
If d < 11 Then a = «Число » » входит в первую десятку»
If d < 11 Then : a = «Число » » входит в первую десятку»
Конструкция:
if (condition)
then (action 1)
else (action 2)
Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?
Dim x As Integer
If x < 3 Then
Dim x As Integer
If x < 3 Then
ElseIf x > 3 Then
В обоих случаях MsgBox выведет число 5.
чем отличается однострочная и многострочная форма синтаксиса
Привет, Виктор!
Однострочная запись короче и работает только с одним условием.
Сбитый Лётчик Небосводов 15.01.2022 в 17:40
Здравствуйте, Евгений!
Однострочная запись работает не только с одним условием.
Dim x , y , z
x = 10 : y = 16 : z = 50
If x > 0 And y = 16 And z < 100 Then MsgBox «Условие выполнено» : Exit Sub
MsgBox «Условие не выполнено»
Второе условие расположено в многострочной записи после ключевого слова Then и операторов, выполняемых при истинном значении первого условия, и предваряется ключевым словом ElseIf.
Сбитый Лётчик Небосводов 16.01.2022 в 00:52
If Условие 1 And If Условие 2 And If Условие 3 … And If УсловиеМакс Then
If Условие 1 Then
If Условие 2 Then
If Условие 3 Then …
If УсловиеМакс Then
Не знаю, не сравнивал. Измерьте скорость выполнения обоих вариантов с помощью функции MicroTimer.
Сбитый Лётчик Небосводов 06.07.2022 в 18:27
If t <> «a» Then If t <> «b» Then t = «c»
P.S. Удалите мои сообщения, которые нужно удалить.
Sub Primer ( )
If t <> «a» Then If t <> «b» Then t = «c» Else t = «d»
Видимо, незадокументированные возможности однострочной функции If.
Решить с помощью VBA
Определите, является ли заданное целое число А нечётным двузначным
числом.
Sub Primer ( )
A = InputBox ( «Введите целое число» )
If Not IsNumeric ( A ) Then Exit Sub
If Len ( A ) = 2 And CLng ( A ) Mod 2 > 0 Then
MsgBox «Заданное целое число является нечетным двузначным»
MsgBox «Заданное целое число не является нечетным двузначным»
Сбитый Лётчик Небосводов 14.02.2022 в 05:30
«блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен».
Это только у меня вызывает недоумение?
«блок операторов после ключевого слова Else выполняется в любом случае»?! Да ну!
И то, что после «но» вовсе не противоречит первой части, хотя при употреблении «но» должно бы.
А по смыслу вторая это «после но» д.б. в отдельном предложении, даже в отдельном абзаце.
Добрый день!
Согласен. Это выражение касается функции IIf. Исправил. Спасибо за бдительность!
Есть столбик с процентами выполнения плана. Если больше 70%,то цвет текста зеленый, если меньше 40% то цвет текста красный. Как это прописать у меня получается только покрасить весь столбец в красный. Помогите пожалуйста я всю голову словмал что не так.
Павел, если в ячейке с процентным форматом отображается 90%, то фактически в ней содержится число 0,9. Вам надо сравнивать значения ячеек не с 70 и 40, а с 0,7 и 0,4.
Источник: vremya-ne-zhdet.ru
Использование операторов If. Then. Else
Используйте оператор If. Then. Else для выполнения определенного оператора или блока операторов в зависимости от значения условия. Операторы If. Then.
Else могут быть вложены в любое необходимое число слоев.
Однако для удобства читаемости лучше использовать оператор Select Case вместо нескольких уровней вложенных операторов If. Then. Else.
Выполнение операторов, если условие равно True
Чтобы выполнить только один оператор, когда условие равно True, используйте однострочный синтаксис оператора If. Then. Else. В следующем примере показан однострочный синтаксис с ключевым словомElse.
Sub FixDate() myDate = #2/13/95# If myDate < Now Then myDate = Now End Sub
Чтобы выполнить несколько строк кода, необходимо использовать многострочный синтаксис. Этот синтаксис включает оператор End If, как показано в примере ниже.
Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = «Red» AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True End If End Sub
Выполнение определенных операторов, если условие равно True, и выполнение других операторов, если оно равно False
Используйте оператор If. Then. Else для определения двух блоков исполняемых операторов: один блок выполняется, если условие равно True, а другой блок выполняется, если условие равно False.
Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False End If End Sub
Проверка второго условия, если первое условие равно False
Можно добавить операторы ElseIf в оператор If. Then. Else для проверки второго условия, если первое условие равно False.
Например, в следующей процедуре функция вычисляет бонус на основе классификации задания. Оператор, следующий за оператором Else, выполняется в том случае, если условия во всех операторах If и ElseIf равны False.
Function Bonus(performance, salary) If performance = 1 Then Bonus = salary * 0.1 ElseIf performance = 2 Then Bonus = salary * 0.09 ElseIf performance = 3 Then Bonus = salary * 0.07 Else Bonus = 0 End If End Function
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Источник: learn.microsoft.com
Оператор If Then в VBA и его вариации. Урок №27
If … Then в VBA – это оператор условного перехода, с помощью которого можно менять последовательность выполнения программы, исходя из результатов соблюдения некоторых условий.
То есть, при вычислении некоего условия, если оно соблюдается, будет получен результат (значение) True и как следствие, программа приступит к выполнению блока операторов, которые заданы в If…Then.
Если же, при вычислении, условие не соблюдается, то будет получен результат (значение) False и оператор If…Then ничего не будет делать.
Так же как If…Then, они могут быть записаны в одну или несколько строк.
Принцип записи кода тот же – если выполняется только один оператор, то можно записать код в одну строку и не использовать ключевое слово End If. Если же нужно последовательно выполнить блок операторов, то в таком случае условное выражение и выполняемые операторы записываются в разных строках.
Синтаксис If…Then…Else в VBA
If (условное выражение) Then
(операторы, которые будут выполняться, когда результат условного выражения = True)
Else
(операторы, которые будут выполняться, результат условного выражения = False)
End If
Пример
Sub myCode() userAge = InputBox(«Скільки вам років?») ‘виводимо вікно в якому просимо щоб користувач ввів свій вік If userAge < 18 Then MsgBox «Ви ще неповнолітній (неповнолітня)» MsgBox «Бажаєте спробувати ще?» Else MsgBox «Добре що вам вже є 18 років» End If MsgBox «Це повідомлення користувач побачить незалежно від того, який вік він вказав.» End Sub
В данном примере, после того как пользователь вводит свой возраст, происходит проверка. В результате, если пользователь ввел цифру меньше 18, то будут выведены сообщения MsgBox «Ви ще неповнолітній (неповнолітня)», MsgBox «Бажаєте спробувати ще?» и MsgBox «Це повідомлення користувач побачить незалежно від того, який вік він вказав.» (Последнее сообщение выводится независимо от того какой у пользователя возраст. Оно вне условного выражения).
Если же пользователь ввёл цифру 18 (или больше), то будет выведено сообщение MsgBox «Добре що вам вже є 18 років» и MsgBox «Це повідомлення користувач побачить незалежно від того, який вік він вказав.»
Синтаксис If…Then…ElseIf в VBA
If (условное выражение 1) Then
(операторы, которые будут выполняться, когда результат первого условного выражения = True)
ElseIf (условное выражение 2) Then
(операторы, которые будут выполняться, когда результат второго условного выражения = True)
ElseIf (условное выражение 3) Then
(операторы, которые будут выполняться, когда результат третьего условного выражения = True)
Else ‘Это необязательный элемент конструкции
(операторы, которые будут выполняться, если результат всех вышеуказанных условных выражений = False)
End If
Пример
Sub myCode() userAge = InputBox(«Скільки вам років?») ‘виводимо вікно в якому просимо щоб користувач ввів свій вік If userAge
В данном примере, последовательно выполняется проверка условий. Если первое условие True, то есть пользователь ввёл возраст меньше 6 лет, то выполняется первый блок операторов (выводится сообщение MsgBox «Ви дошкільня»).
Если первое условие False (введённый возраст больше 6), то программа переходит к вычислению второго условия. И так до самого последнего условия, пока не будет получен результат True. Если же ни в одном условном выражении не будет значения True, то программа ничего не будет делать.
Пример
Sub myCode() userAge = InputBox(«Скільки вам років?») ‘виводимо вікно в якому просимо щоб користувач ввів свій вік If userAge = 6 Then MsgBox «Вам 6 років» ElseIf userAge = 17 Then MsgBox «Вам 17 років» ElseIf userAge = 23 Then MsgBox «Вам 23 роки» ElseIf userAge = 55 Then MsgBox «Вам 55 років» End If End Sub
В данном примере осуществляется проверка на равенство. И если пользователь введёт 6, 17, 23, или 55, то программа будет выполнять соответствующий блок операторов.
Если же пользователь введёт какие-нибудь другие цифры, то результат вычисления всех условий будет False и программа не будет ничего делать (никаких сообщений пользователь больше не увидит).
Вложенные операторы If…Then
Иногда, при написании программ, возникает необходимость проверить не одно, а несколько условий, чтобы выполнить какое-нибудь действие. В таком случае, можно разместить (вложить) один оператор If…Then внутри другого.
Такое действие называется вложением операторов.
Принцип действия вложенных операторов, следующий:
- Если значение первого условия True, то программа переходит к следующей проверке (выполняется вложенное условие).
- Если значение первого условия False, то программа не будет выполнять вложенные операторы, а перейдёт к выполнению тех операторов, которые следуют после ключевого слова Else.
Пример вложения операторов If…Then
Sub myCode() userAge = InputBox(«Скільки вам років?») ‘виводимо вікно в якому просимо щоб користувач ввів свій вік If userAge > 0 Then If userAge
Примечание.
Использовать вложенные операторы можно, но не рекомендуется. Лучше использовать конструкцию If…Then…ElseIf, которая является эквивалентной вложению операторов If…Then.
Вас может заинтересовать
- Ошибки выполнения процедур и функций VBA. Урок №39
- Процедуры типа Function. Урок №38
- Функции в VBA и их аргументы. Урок №37
- Способы вызова процедур в VBA. Урок №36
- Способы передачи аргументов в процедуру. Урок №35
- Передача аргументов при вызове процедуры в VBA. Урок №34
- Аргументы процедур в VBA. Урок №33
- Процедуры в VBA: Основные понятия. Урок №32
- Оператор Do…Loop в VBA. Урок №31
- Оператор For Each…Next в VBA. Урок №30
Источник: d-nik.site