Функція VBA IIF

У цьому підручнику буде пояснено, як використовувати IIF у VBA

Функція VBA IIF подібна до використання функції IF у Excel. Він перевіряє, чи виконується умова, повертаючи одне значення (або обчислення), якщо TRUE, інше значення (або обчислення), якщо FALSE.

Він схожий на оператор VBA If, багато хто вважає це скороченням для використання цього методу, оскільки вам потрібно написати лише один рядок коду, щоб отримати бажаний результат, а не використовувати Якщо… Тоді… В іншому… Закінчити Якщо рутина. Однак його потрібно правильно використовувати, оскільки це може призвести до проблем у вашому коді.

Синтаксис IIF

Функція IFF складається з трьох частин - логічного тесту, істинної частини та хибної частини.

  • Вираз:Логічне випробування, яке має відбутися.
  • Справжня частина: Результат, який буде повернуто, якщо логічний тест - ІСТИНА.
  • Неправдива частина: Результат, який буде повернуто, якщо логічний тест НЕВІРНИЙ.

Написання процедури функції IIF

123 Функція GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Ім'я Джон", "Ім'я не Джон")Функція завершення

У наведеній вище функції ми можемо використовувати підпроцедуру, щоб перевірити, чи є змінна, яку ми передаємо функції, рядком "Джон"

123 Sub TestGetNamaes ()MsgBox GetNames ("Джон")End Sub

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

Якби замість цього ми використовували метод If, код виглядав би так:

1234567 Функція GetNames (strName As String) As StringЯкщо (strName = "Джон") ТодіGetNames = "Ім'я Джон"ІнакшеGetNames = "Ім’я не Джон"Закінчити ЯкщоФункція завершення

Ми ефективно написали один рядок коду замість 5 рядків коду - вражаюче!

Навіщо використовувати If If?

Розглянемо наступне

123 Функція GetNames (strName As String) As StringGetNames = IIf (strName = "Джон", MsgBox ("Ім’я Іван"), MsgBox ("Ім’я не Джон"))Функція завершення

Тепер, якщо ви запустите наступну підпроцедуру для виклику вашої функції

123 Sub TestGetNames ()GetNames ("Джон")End Sub

Ви отримаєте те саме вікно повідомлення, що і раніше, але відразу після цього - отримаєте наступне вікно повідомлення!

Функція IIF виконує як розділи TRUE, так і FALSE рядка коду - вона не виходить з коду, як тільки визначить, що умова відповідає дійсності, - вона все одно виконує помилковий розділ, - таким чином, даючи нам помилкове повідомлення у друга скринька повідомлень. Якби ви використовувалиЯкщо… Тоді… В іншому… Закінчити Якщо - цього б не сталося - функція IF виконує лише розділ коду TRUE або FALSE - залежно від логіки, що передається до коду.

Код погано розроблений (навмисно!), А поля повідомлень утримуються в рядку коду, на якому знаходиться оператор 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) як DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Функція завершення

Тоді ми могли б викликати цю функцію з підпроцедури

12345 Sub FindDiscount ()Dim dblP як подвійнийdblP = 899MsgBox ("Ви можете отримати знижку" & GetDiscount (dblP) & "%")End Sub

або ви можете викликати його з Excel, використовуючи його як UDF (функція, що визначається користувачем)

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

wave wave wave wave wave