VBA Excel. Оператор If…Then…Else и функция IIf

    Однострочная и многострочная конструкции оператора If…Then…Else и функция IIf, используемые в коде VBA Excel — синтаксис, компоненты, примеры.

    Оператор If…Then…Else

    Оператор If…Then…Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.

    Однострочная конструкция

    Оператор If…Then…Else может использоваться в однострочной конструкции без ключевых слов Else, End If.

    Синтаксис однострочной конструкции If…Then…

    Компоненты однострочной конструкции If…Then…

    • условие — числовое или строковое выражение, возвращающее логическое значение True или False;
    • операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.

    Если компонент условие возвращает значение False, блок операторов конструкции If…Then… пропускается и управление программой передается следующей строке кода.

    Пример 1

    Многострочная конструкция

    Синтаксис многострочной конструкции If…Then…Else

    Компоненты многострочной конструкции If…Then…Else:

    • условие — числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
    • операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;
    • пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы].

    Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.

    Самый простой вариант многострочной конструкции If…Then…Else:

    Пример 2

    Функция IIf

    Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.

    Синтаксис функции

    Компоненты функции IIf

    • условие — числовое или строковое выражение, возвращающее логическое значение True или False;
    • если True — значение, которое возвращает функция IIf, если условие возвратило значение True;
    • если False — значение, которое возвращает функция IIf, если условие возвратило значение False.

    Компоненты если True и если False могут быть выражениями, значения которых будут вычислены и возвращены.

    Пример 3

    Пример 4
    Стоит отметить, что не зависимо от того, выполняется условие или нет, функция IIf вычислит оба выражения в параметрах если True и если False:


    При нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из первых двух примеров, генерируется ошибка, так как в этих случаях функция InputBox возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d. В третьем примере есть обработчик ошибок.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    22 комментария для “VBA Excel. Оператор If…Then…Else и функция IIf”

    1. Евгений

      Спасибо, Александр!
      Я изменил некоторые формулировки в статье, допускающие неоднозначное толкование. Кроме того, я решил проверить, что будет, если поместить при ElseIf выражение после Then, и вот что получилось:

      Код работает! Но он не будет работать, если строки

      заменить на строку

      или на строку

    2. Конструкция:
      if (condition)
      then (action 1)
      else (action 2)
      Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?

      1. Евгений

        Привет, Михаил!
        Условие в вашей конструкции проверяется один раз:

        И даже если в конструкции используется блок ElseIf ... Then, для проверки условия используется первоначальное значение:

        В обоих случаях MsgBox выведет число 5.

      1. Евгений

        Привет, Виктор!
        Однострочная запись короче и работает только с одним условием.

        1. Сбитый Лётчик Небосводов

          Здравствуйте, Евгений!
          Однострочная запись работает не только с одним условием.

          1. Евгений

            Добрый вечер!
            Здесь «одно условие» означает выражение, которое может состоять из нескольких входящий в него условий (лучше сказать «под-условий») и возвращает логическое значение True или False. Такое выражение может быть только одно в однострочной записи.

            Второе условие расположено в многострочной записи после ключевого слова Then и операторов, выполняемых при истинном значении первого условия, и предваряется ключевым словом ElseIf.

            1. Сбитый Лётчик Небосводов

              Здравствуйте, Евгений!
              Может знаете, что быстрее

              или

              1. Сбитый Лётчик Небосводов

                Здравствуйте, Евгений!
                Продолжим спор 🙂
                Однострочная запись работает не только с одним условием.

                P.S. Удалите мои сообщения, которые нужно удалить.

            2. Решить с помощью VBA
              Определите, является ли заданное целое число А нечётным двузначным
              числом.

              1. Евгений

                Привет, Икром!
                Решение может быть таким:

            3. Сбитый Лётчик Небосводов

              Здравствуйте!
              «блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен».
              Это только у меня вызывает недоумение?
              «блок операторов после ключевого слова Else выполняется в любом случае»?! Да ну!
              И то, что после «но» вовсе не противоречит первой части, хотя при употреблении «но» должно бы.
              А по смыслу вторая это «после но» д.б. в отдельном предложении, даже в отдельном абзаце.

              1. Евгений

                Добрый день!
                Согласен. Это выражение касается функции IIf. Исправил. Спасибо за бдительность!

            4. Есть столбик с процентами выполнения плана. Если больше 70%,то цвет текста зеленый, если меньше 40% то цвет текста красный. Как это прописать у меня получается только покрасить весь столбец в красный. Помогите пожалуйста я всю голову словмал что не так.

              1. Евгений

                Павел, если в ячейке с процентным форматом отображается 90%, то фактически в ней содержится число 0,9. Вам надо сравнивать значения ячеек не с 70 и 40, а с 0,7 и 0,4.

                1. Евгений, я так пробовал, но тогда сразу подсвечивается красным вся переменная.

                  И не работает, просто красит весь столбик в красный то есть работает вторая строка, первая с зеленым цветом не работает, он проскакивает её.

                2. Добрый день!
                  Во втором примере получается все цифры от 31 до бесконечности в четвертом десятке (хотя диапазон от 1 до 40). Может стоит дописать как в третьем примере, чтобы при несоответствии цифры возвращал на начальное окно ввода?

                3. Как написать код, чтобы при закрашивании ячейки красным цветом открывалась почта аутлук?

                  1. Евгений

                    Добрый день, Егор!
                    В VBA Excel нет события рабочего листа, привязанного к смене цвета ячейки.

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.