VBA If, ElseIf, Else (полное руководство по операторам If)

Заявление VBA If

Если то

Операторы If в VBA позволяют проверять, являются ли выражения ИСТИННЫМИ или ЛОЖНЫМИ, выполняя другой код в зависимости от результатов.Давайте посмотрим на простой пример:
1 Если Range ("a2"). Value> 0, то Range ("b2"). Value = "Positive"
Это проверяет, больше ли значение в диапазоне A2, чем 0. Если да, установите для диапазона B2 значение «Положительный».Примечание: при тестировании условий мы будем использовать операторы сравнения =,>, <,, =. Подробнее о них мы поговорим позже в статье.Вот синтаксис простого однострочного оператора If:
1 Если [test_expression], то [действие]
Чтобы упростить чтение, вы можете использовать символ продолжения строки (подчеркивание), чтобы расширить операторы If до двух строк (как мы это сделали на рисунке выше):
12 Если [test_expression], то _[действие]
12 Если Range ("a2"). Value> 0 Then _Диапазон ("b2"). Значение = "Положительное"

Конец, если

Приведенный выше «однострочный» оператор if хорошо работает, когда вы проверяете одно условие. Но по мере того, как ваши операторы IF усложняются с несколькими условиями, вам нужно будет добавить «End If» в конец оператора if:
123 Если Range ("a2"). Value> 0, тоДиапазон ("b2"). Значение = "Положительное"Конец, если

Вот синтаксис:

123 Если [test_expression], то[действие]Конец, если

End If означает конец оператора if.

Теперь давайте добавим ElseIF:

ElseIF - несколько условий

ElseIf добавляется к существующему оператору If. ElseIf проверяет выполнение условия ТОЛЬКО если предыдущие условия не были выполнены.В предыдущем примере мы проверили, положительное ли значение ячейки. Теперь мы также проверим, является ли значение ячейки отрицательным с помощью ElseIf:
12345 Если Range ("a2"). Value> 0, тоДиапазон ("b2"). Значение = "Положительное"ElseIf Range ("a2"). Значение <0 ТогдаДиапазон ("b2"). Значение = "Отрицательное"Конец, если

Вы можете использовать несколько ElseIf для проверки нескольких условий:

1234567891011 Sub If_Multiple_Conditions ()Если Range ("a2"). Value = "Cat", тоДиапазон ("b2"). Значение = "Мяу"ElseIf Range ("a2"). Value = "Dog" ТогдаДиапазон ("b2"). Значение = "Гав"ElseIf Range ("a2"). Value = "Duck" ТогдаДиапазон ("b2"). Значение = "Кряк"Конец, еслиКонец подписки

Теперь мы добавим Еще:

Еще

В Еще будет работать, если никакие другие предыдущие условия не были выполнены.

Мы закончим наш пример, используя Else, чтобы указать, что если значение ячейки не является положительным или отрицательным, то оно должно быть равно нулю:

1234567 Если Range ("a2"). Value> 0, тоДиапазон ("b2"). Значение = "Положительное"ElseIf Range ("a2"). Значение <0 ТогдаДиапазон ("b2"). Значение = "Отрицательное"ЕщеДиапазон ("b2"). Значение = "Ноль"Конец, если

Если еще

Самый распространенный тип оператора If - это простой If-Else:

1234567 Sub If_Else ()Если Range ("a2"). Value> 0, тоДиапазон ("b2"). Значение = "Положительное"ЕщеДиапазон ("b2"). Значение = "Не положительное"Конец, еслиКонец подписки

Вложенные IF

Вы также можете «вкладывать» операторы if друг в друга.

1234567891011 Sub Nested_Ifs ()Если Range ("a2"). Value> 0, тоДиапазон ("b2"). Значение = "Положительное"ЕщеЕсли Range ("a2"). Value <0 ThenДиапазон ("b2"). Значение = "Отрицательное"ЕщеДиапазон ("b2"). Значение = "Ноль"Конец, еслиКонец, еслиКонец подписки

ЕСЛИ - Или, И, Xor, Не

Далее мы обсудим логические операторы: Or, And, Xor, Not.

Я для

В Или оператор проверяет, если как минимум одно условие выполнено.

Следующий код проверяет, является ли значение в диапазоне A2 меньше 5000 или больше 10000:

123 Если Диапазон ("a2"). Значение 10000 ТогдаДиапазон ("b2"). Значение = "Вне диапазона"Конец, если

Вы можете включить несколько Ор в одну строку:

123 Если Диапазон ("a2"). Значение 10000 Или Диапазон ("a2"). Значение = 9999 ТогдаДиапазон ("b2"). Значение = "Вне диапазона"Конец, если

Если вы собираетесь использовать несколько OR, рекомендуется использовать символ продолжения строки, чтобы облегчить чтение кода:

123456 Если Диапазон ("a2"). Значение <5000 или _Диапазон ("a2"). Значение> 10000 или _Диапазон ("a2"). Значение = 9999 ТогдаДиапазон ("b2"). Значение = "Вне диапазона"Конец, если

Если и

Оператор And позволяет проверить, ВСЕ условия соблюдены.

123 Если Range ("a2"). Value> = 5000 And Range ("a2"). Value <= 10000 ThenДиапазон ("b2"). Значение = "В диапазоне"Конец, если

Если Xor

Оператор Xor позволяет проверить, выполняется ровно одно условие. Если соблюдаются нулевые условия, Xor вернет FALSE, если два или более условий выполнены, Xor также вернет false.

Я редко видел, чтобы Xor использовался в программировании на VBA.

Если не

Оператор Not используется для преобразования FALSE в TRUE или TRUE в FALSE:

123 Sub IF_Not ()MsgBox Not (True)Конец подписки

Обратите внимание, что для переключения оператора Not требуется скобка, заключающая выражение.

Оператор Not также может применяться к операторам If:

123 Если нет (Диапазон ("a2"). Значение> = 5000 и диапазон ("a2"). Значение <= 10000), тоДиапазон ("b2"). Значение = "Вне диапазона"Конец, если

Если сравнения

При сравнении обычно используется один из операторов сравнения:

Оператор сравнения Объяснение
= Равно
Не равно
> Больше чем
>= Больше или равно
< Меньше, чем
<= Меньше или равно

Однако вы также можете использовать любое выражение или функция что приводит к ИСТИНА или ЛОЖЬ

Если - логическая функция

При построении выражений для операторов If вы также можете использовать любую функцию, которая генерирует TRUE или False. VBA имеет несколько из этих функций:

Функция Описание
IsDate Возвращает ИСТИНА, если выражение является допустимой датой.
Пустой Проверьте наличие пустых ячеек или неопределенных переменных
IsError Проверить значения ошибок
Нулевой Проверить значение NULL
IsNumeric Проверить числовое значение

Их можно назвать так:

1 Если IsEmpty (Range ("A1"). Value), то MsgBox "Cell Empty"

В Excel также есть много дополнительных функций, которые можно вызывать с помощью WorksheetFunction. Вот пример функции Excel IsText:

12 Если Application.WorksheetFunction.IsText (Range ("a2"). Value), то _MsgBox «Ячейка - это текст»

Вы также можете создавать свои собственные определяемые пользователем функции (UDF). Ниже мы создадим простую логическую функцию, возвращающую ИСТИНА. Затем мы вызовем эту функцию в нашем операторе If:

1234567891011 Sub If_Function ()Если TrueFunction, тоMsgBox "True"Конец, еслиКонец подпискиФункция TrueFunction () как логическое значениеTrueFunction = TrueКонечная функция

Сравнение текста

Вы также можете сравнить текст, аналогично сравнению чисел:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Сравнивая текст, вы должны помнить о «регистре» (верхний или нижний). По умолчанию VBA считает буквы с разными регистрами несоответствующими. Другими словами, «А» «а».Если вы хотите, чтобы VBA игнорировал регистр, вы должны добавить объявление Option Compare Text в верхнюю часть модуля:
1 Вариант Сравнить текст

После этого объявления «А» = «а»:
12345 Вариант Сравнить текстSub If_Text ()MsgBox "a" = "A"Конец подписки

VBA, если нравится

Оператор Like VBA позволяет проводить неточные сравнения текста. Щелкните ссылку «Like Operator», чтобы узнать больше, но мы покажем базовый пример ниже:

12345678 Dim strName as StringstrName = "Мистер Чарльз"Если strName Like "Mr *" ТогдаMsgBox "True"ЕщеMsgBox "False"Конец, если

Здесь мы используем подстановочный знак звездочки «*». * Обозначает любое количество любых символов. Таким образом, приведенный выше оператор If вернет ИСТИНА. Оператор Like - чрезвычайно мощный, но часто недостаточно используемый инструмент для работы с текстом.

Если петли

Циклы VBA позволяют повторять действия. Комбинирование IF-ELSE с циклами - отличный способ быстро обработать многие вычисления.

Продолжая наш пример Положительного / Отрицательного, мы добавим цикл For Each Loop для перебора диапазона ячеек:

1234567891011121314 Sub If_Loop ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («A2: A6»)Если Cell.Value> 0, тоCell.Offset (0, 1) .Value = "Положительный"ElseIf Cell.Value <0 ТогдаCell.Offset (0, 1) .Value = "Отрицательное"ЕщеCell.Offset (0, 1) .Value = "Ноль"Конец, еслиСледующая ячейкаКонец подписки

Если остальные примеры

Теперь перейдем к более конкретным примерам.

Проверить, пуста ли ячейка

Этот код проверяет, пуста ли ячейка. Если он пуст, он проигнорирует ячейку. Если он не пустой, он выведет значение ячейки в ячейку справа:
1234567 Sub If_Cell_Empty ()Если Range ("a2"). Value "" ThenДиапазон ("b2"). Значение = Диапазон ("a2"). ЗначениеКонец, еслиКонец подписки

Проверьте, содержит ли ячейка определенный текст

Функция Instr проверяет, найдена ли строка текста в другой строке. Используйте его с оператором If, чтобы проверить, содержит ли ячейка определенный текст:
123 Если Instr (Range ("A2"). Value, "text")> 0, тоMsgbox "Текст найден"Конец, если

Проверить, содержит ли ячейка текст

Этот код проверит, является ли ячейка текстом:
1234567 Sub If_Cell_Is_Text ()Если Application.WorksheetFunction.IsText (Range ("a2"). Value), тоMsgBox «Ячейка - это текст»Конец, еслиКонец подписки

Если Goto

Вы можете использовать результат оператора If, чтобы «перейти к» другому разделу кода.
12345678910 Sub IfGoTo ()Если IsError (Cell.value), тоПерейти к пропускуКонец, если'Некоторый кодПропускать:Конец подписки

Удалить строку, если ячейка пуста

Используя If и циклы, вы можете проверить, пуста ли ячейка, и, если да, удалить всю строку.
123456789 Sub DeleteRowIfCellBlank ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («A2: A10»)Если Cell.Value = "" Тогда Cell.EntireRow.DeleteСледующая ячейкаКонец подписки

Если MessageBox Да / Нет

С помощью окон сообщений VBA вы можете попросить пользователя выбрать один из нескольких вариантов. Окно сообщения Да / Нет предлагает пользователю выбрать Да или Нет. Вы можете добавить Окно сообщения Да / Нет в процедуру, чтобы спросить пользователя, хотят ли они продолжить выполнение процедуры или нет. Вы обрабатываете ввод пользователя с помощью оператора If.Вот окно сообщения Да / Нет на практике:
123456789101112 Sub MsgBoxVariable ()Тусклый ответ как целое числоanswer = MsgBox («Продолжить?», vbQuestion + vbYesNo)Если answer = vb Да ТогдаMsgBox "Да"ЕщеMsgBox "Нет"Конец, еслиКонец подписки

VBA If, ElseIf, Else в Access VBA

Функции If, ElseIf и Else в Access VBA работают точно так же, как и в Excel VBA.

Вы можете использовать оператор If, чтобы проверить, есть ли записи в наборе записей.

wave wave wave wave wave