VBA IIF функция

Този урок ще обясни как да използвате IIF във VBA

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

Подобно е на VBA If Statement, мнозина го смятат за пряк път към използването на този метод, тъй като трябва да напишете само един ред код, за да получите желания резултат, вместо да използвате Ако… Тогава… В противен случай… Край Ако рутина. Той обаче трябва да се използва правилно, тъй като може да доведе до проблеми във вашия код.

IIF синтаксис

Функцията IFF се състои от 3 части - логическият тест, истинската част и фалшивата част.

  • Израз:Логическият тест, който трябва да се проведе.
  • Истинска част: Резултатът, който ще бъде върнат, ако логическият тест е TRUE.
  • Фалшива част: Резултатът, който ще бъде върнат, ако логическият тест е FALSE.

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

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

В горната функция можем да използваме подпроцедура, за да проверим дали променливата, която предаваме на функцията, е низът „John“

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

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

Ако вместо това бяхме използвали метода If, кодът би изглеждал така:

1234567 Функция GetNames (strName As String) Като StringАко (strName = "Джон") ТогаваGetNames = "Името е Джон"ИначеGetNames = "Името не е Джон"Край АкоКрайна функция

Ефективно написахме един ред код вместо 5 реда код - впечатляващо!

Защо да използвате If вместо това?

Помислете за следното

123 Функция GetNames (strName As String) Като StringGetNames = IIf (strName = "John", MsgBox ("Името е John"), MsgBox ("Името не е John"))Крайна функция

Сега, ако изпълните следната подпроцедура, за да извикате вашата функция

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

Ще получите същото поле за съобщения като преди, но след това веднага след това - ще получите следващото поле за съобщение!

Функцията IIF изпълнява както секциите TRUE, така и FALSE от реда на кода - не излиза от кода, след като установи, че условието е вярно - все още изпълнява и фалшивата секция - като по този начин ни дава фалшиво съобщение в второ поле за съобщения. Ако бяхте използвалиАко… Тогава… В противен случай… Край Ако - това нямаше да се случи - функцията IF изпълнява само раздела TRUE или FALSE на кода - в зависимост от логиката, която се предава на кода.

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

Бихме могли да поправим тази грешка, като преместим полето за съобщения под функционалния ред на IIF, както е в кода по-долу, или като преместим полето със съобщение към подпроцедурата, както е посочено в първия пример в тази статия.

1234 Функция GetNames (strName As String) Като 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 As DoubledblP = 899MsgBox ("Отстъпката, която можете да получите е" & GetDiscount (dblP) & "%")End Sub

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

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave