Funkcja VBA IIF

Ten samouczek wyjaśni, jak używać IIF w VBA

Funkcja VBA IIF jest podobna do funkcji JEŻELI w programie Excel. Sprawdza, czy warunek jest spełniony, zwracając jedną wartość (lub obliczenie), jeśli TRUE, inną wartość (lub obliczenie), jeśli FALSE.

Jest ona podobna do instrukcji VBA If, wielu uważa ją za skrót do korzystania z tej metody, ponieważ wystarczy napisać jeden wiersz kodu, aby uzyskać pożądany wynik, zamiast używać Jeśli… Wtedy… Inaczej… Koniec jeśli rutyna. Jednak musi być używany poprawnie, ponieważ może prowadzić do problemów w kodzie.

Składnia IIF

Funkcja IFF składa się z 3 części - testu logicznego, części prawdziwej i części fałszywej.

  • Wyrażenie:Test logiczny, który ma się odbyć.
  • Prawdziwa część: Wynik, który zostanie zwrócony, jeśli test logiczny ma wartość PRAWDA.
  • Część fałszywa: Wynik, który zostanie zwrócony, jeśli test logiczny ma wartość FAŁSZ.

Pisanie procedury funkcji IIF

123 Funkcja GetNames(strName As String) As StringGetNames = IIf(strName = "Jan", "Nazywam się Jan", "Nazywam się nie Jan")Koniec funkcji

W powyższej funkcji możemy użyć podprocedury, aby sprawdzić, czy zmienna, którą przekazujemy do funkcji, jest ciągiem „John”

123 Test podrzędnyPobierzNazwy()MsgBox GetNames("Jan")Napis końcowy

Gdybyśmy mieli uruchomić podprocedurę TestGetNames, wywołałaby ona funkcję GetNames i zwróciłaby okno komunikatu.

Gdybyśmy zamiast tego użyli metody If, kod wyglądałby tak:

1234567 Funkcja GetNames(strName As String) As StringIf(strName = "Jan") ThenGetNames = "Nazywam się Jan"W przeciwnym razieGetNames = "Nazwa nie jest Jan"Zakończ, jeśliKoniec funkcji

Skutecznie napisaliśmy jedną linijkę kodu zamiast 5 linijek kodu - imponujące!

Dlaczego warto korzystać z If Zamiast tego?

Rozważ następujące

123 Funkcja GetNames(strName As String) As StringGetNames = IIf(strName = "Jan", MsgBox("Nazwa to Jan"), MsgBox("Nazwa to nie Jan"))Koniec funkcji

Teraz, jeśli uruchomisz następującą procedurę podrzędną, aby wywołać swoją funkcję

123 PodtestPobierz nazwy()GetNames ("Jan")Napis końcowy

Otrzymasz to samo okno komunikatu, co poprzednio, ale zaraz po tym - otrzymasz następne okno komunikatu!

Funkcja IIF wykonuje zarówno sekcje TRUE, jak i FALSE linii kodu - nie opuszcza kodu po stwierdzeniu, że warunek jest spełniony - nadal wykonuje również sekcję false - dając nam w ten sposób fałszywą wiadomość w drugie okno wiadomości. Gdybyś użyłJeśli… Wtedy… Inaczej… Koniec jeśli - tak by się nie stało - funkcja JEŻELI wykonuje tylko sekcję TRUE lub FALSE kodu - w zależności od logiki przekazywanej do kodu.

Kod jest źle zaprojektowany (celowo!), ponieważ pola komunikatów są przechowywane w wierszu kodu, w którym znajduje się instrukcja IIF, a nie po kodzie lub w podprocedurze. Ponieważ funkcja IIF uruchamia zarówno sekcje TRUE, jak i FALSE instrukcji, zwracane są oba komunikaty.

Możemy naprawić ten błąd, przenosząc okno komunikatu poniżej wiersza funkcji IIF, jak w poniższym kodzie, lub przenosząc okno komunikatu do podprocedury zgodnie z pierwszym przykładem w tym artykule.

1234 Funkcja GetNames(strName As String) As StringGetNames = IIf(strName = "Jan", "Nazywam się Jan", "Nazywam się nie Jan")MsgBox (GetNames)Koniec funkcji

Jeśli jesteś ostrożny podczas pisania kodu, funkcja IIF może zaoszczędzić wiele linii kodu i dodatkowego pisania!

Zagnieżdżone IIF

Możemy zagnieżdżać funkcję IIF w podobny sposób do zagnieżdżania funkcji JEŻELI, ale ponownie wszystko odbywa się w jednym wierszu.

123 Funkcja GetDiscount(dblPrice jako Double) jako DoubleGetDiscount = IIf(dblPrice >= 500, 10, IIf(dblPrice >= 250, 5, IIf(dblPrice >= 100, 2,5, 0)))Koniec funkcji

Moglibyśmy wtedy wywołać tę funkcję z podprocedury

12345 Sub ZnajdźRabat()Dim dblP jako podwójnydblP = 899MsgBox ("Zniżka, którą możesz uzyskać to " & GetDiscount(dblP) & "%")Napis końcowy

lub możesz wywołać go z poziomu programu Excel, używając go jako UDF (funkcja zdefiniowana przez użytkownika)

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave