Функция VBA IIF

В этом руководстве объясняется, как использовать IIF в VBA.

Функция VBA IIF аналогична использованию функции ЕСЛИ в Excel. Он проверяет, выполняется ли условие, возвращая одно значение (или расчет), если ИСТИНА, другое значение (или расчет), если ЛОЖЬ.

Он похож на оператор If в VBA, многие считают его сокращением использования этого метода, поскольку вам нужно написать только одну строку кода, чтобы получить желаемый результат, а не использовать Если… Тогда… Иначе… Конец Если рутина. Однако его необходимо использовать правильно, поскольку это может привести к проблемам в вашем коде.

IIF синтаксис

Функция IFF состоит из 3 частей - логической проверки, истинной части и ложной части.

  • Выражение:Логический тест, который предстоит пройти.
  • Истинная часть: Результат, который будет возвращен, если логический тест - ИСТИНА.
  • Ложная часть: Результат, который будет возвращен, если логическая проверка - ЛОЖЬ.

Написание процедуры функции IIF

123 Функция GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Имя - Джон", "Имя не Джон")Конечная функция

В приведенной выше функции мы можем использовать подпроцедуру, чтобы проверить, является ли переменная, которую мы передаем функции, строкой «Джон».

123 Sub TestGetNamaes ()MsgBox GetNames («Джон»)Конец подписки

Если бы мы запускали подпроцедуру TestGetNames, она вызывала бы функцию GetNames и возвращала бы окно сообщения.

Если бы вместо этого мы использовали метод If, код выглядел бы так:

1234567 Функция GetNames (strName As String) As StringЕсли (strName = "John") ТогдаGetNames = "Меня зовут Джон"ЕщеGetNames = "Имя не Джон"Конец, еслиКонечная функция

Мы фактически написали одну строку кода вместо пяти - впечатляюще!

Зачем использовать If вместо?

Рассмотрим следующие

123 Функция GetNames (strName As String) As StringGetNames = IIf (strName = "Джон", MsgBox ("Имя - Джон"), MsgBox ("Имя не Джон"))Конечная функция

Теперь, если вы запустите следующую подпроцедуру для вызова вашей функции

123 Sub TestGetNames ()GetNames («Джон»)Конец подписки

Вы получите то же окно сообщения, что и раньше, но сразу после этого вы получите следующее окно сообщения!

Функция IIF выполняет разделы ИСТИНА и ЛОЖЬ в строке кода - она ​​не выходит из кода после того, как обнаруживает, что условие истинно - она ​​по-прежнему выполняет раздел Ложь, таким образом давая нам ложное сообщение в второе окно сообщения. Если бы вы использовалиЕсли… Тогда… Иначе… Конец Если - этого бы не произошло - функция ЕСЛИ выполняет только раздел кода ИСТИНА или ЛОЖЬ - в зависимости от логики, передаваемой коду.

Код плохо спроектирован (специально!), Окна сообщений удерживаются внутри строки кода, в которой находится оператор IIF, а не после кода или в подпрограмме. Поскольку функция IIF запускает разделы TRUE и FALSE инструкции, возвращаются оба сообщения.

Мы могли бы исправить эту ошибку, переместив окно сообщения ниже строки функции IIF, как в приведенном ниже коде, или переместив окно сообщения в подпроцедуру, как в первом примере в этой статье.

1234 Функция GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Имя - Джон", "Имя не Джон")MsgBox (GetNames)Конечная функция

Если вы будете осторожны при написании кода, функция IIF может сэкономить вам много строк кода и лишний набор текста!

Вложенные IIF

Мы можем вложить IIF-функцию аналогично вложению IF-функции, но опять же, все делается в одной строке.

123 Функция GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Конечная функция

Затем мы могли бы вызвать эту функцию из подпроцедуры

12345 Дополнительная скидка на поиск ()Dim dblP как двойнойdblP = 899MsgBox ("Вы можете получить скидку" & GetDiscount (dblP) & "%")Конец подписки

или вы можете вызвать его из Excel, используя его как UDF (определяемую пользователем функцию)

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave