Заявление 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Конечная функция |

Сравнение текста
Вы также можете сравнить текст, аналогично сравнению чисел:
Сравнивая текст, вы должны помнить о «регистре» (верхний или нижний). По умолчанию VBA считает буквы с разными регистрами несоответствующими. Другими словами, «А» «а».Если вы хотите, чтобы VBA игнорировал регистр, вы должны добавить объявление Option Compare Text в верхнюю часть модуля:
После этого объявления «А» = «а»:
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, чтобы проверить, есть ли записи в наборе записей.
