Funcția VBA IIF

Acest tutorial va explica modul de utilizare a IIF în VBA

Funcția VBA IIF este similară cu utilizarea funcției IF în Excel. Testează dacă este îndeplinită o condiție, returnând o valoare (sau calcul) dacă este ADEVĂRAT, o altă valoare (sau calcul) dacă este FALSĂ.

Este similar cu declarația VBA If, mulți consideră că este o comandă rapidă la utilizarea acestei metode, deoarece trebuie să scrieți doar o linie de cod pentru a obține rezultatul dorit, mai degrabă decât să utilizați un Dacă … Atunci … Altfel … Încheie dacă rutină. Cu toate acestea, trebuie utilizat corect, deoarece poate duce la probleme în codul dvs.

Sintaxa IIF

Funcția IFF este alcătuită din 3 părți - testul logic, partea adevărată și partea falsă.

  • Expresie:Testul logic care urmează să aibă loc.
  • Partea adevărată: Rezultatul care va fi returnat dacă testul logic este ADEVĂRAT.
  • Partea falsă: Rezultatul care va fi returnat dacă testul logic este FALS.

Scrierea unei proceduri de funcționare IIF

123 Funcția GetNames (strName As String) Ca StringGetNames = IIf (strName = "John", "Numele este John", "Numele nu este John")Funcția de sfârșit

În funcția de mai sus, putem folosi o sub-procedură pentru a testa dacă variabila pe care o transmitem funcției este șirul „John”

123 Sub TestGetNamaes ()MsgBox GetNames („John”)Sfârșitul Sub

Dacă ar fi să executăm sub-procedura TestGetNames, aceasta ar apela funcția GetNames și va returna o casetă de mesaj.

Dacă am fi folosit în schimb metoda If, codul ar fi arătat astfel:

1234567 Funcția GetNames (strName As String) Ca StringIf (strName = "John") AtunciGetNames = "Numele este John"AltfelGetNames = "Numele nu este John"End IfFuncția de sfârșit

Am scris efectiv o linie de cod în loc de 5 linii de cod - impresionant!

De ce să folosiți If In loc?

Luați în considerare următoarele

123 Funcția GetNames (strName As String) Ca StringGetNames = IIf (strName = "John", MsgBox ("Numele este John"), MsgBox ("Numele nu este John"))Funcția de sfârșit

Acum, dacă rulați următoarea sub-procedură pentru a apela funcția dvs.

123 Sub TestGetNames ()GetNames („John”)Sfârșitul Sub

Veți primi aceeași casetă de mesaj ca înainte, dar imediat după aceea - veți primi următoarea casetă de mesaje!

Funcția IIF execută atât secțiunile ADEVĂRATE, cât și FALSE ale liniei de cod - nu iese din cod odată ce a găsit condiția ca fiind adevărată - execută în continuare și secțiunea falsă - oferindu-ne astfel un mesaj fals în a doua casetă de mesaje. Dacă ai fi folositDacă … Atunci … Altfel … Încheie dacă - acest lucru nu s-ar fi produs - funcția IF execută doar secțiunea ADEVĂRATĂ sau FALSĂ a codului - în funcție de logica transmisă codului.

Codul este prost conceput (intenționat!), Cu casetele de mesaje ținute în linia de cod pe care se află instrucțiunea IIF, mai degrabă decât după cod sau în sub-rutină. Deoarece funcția IIF rulează atât secțiunile TRUE cât și FALSE ale instrucțiunii, ambele mesaje sunt returnate.

Am putea remedia această eroare mutând caseta de mesaj sub linia funcțională IIF, ca în codul de mai jos sau mutând caseta de mesaj în Sub-procedură conform primului exemplu din acest articol.

1234 Funcția GetNames (strName As String) Ca StringGetNames = IIf (strName = "John", "Numele este John", "Numele nu este John")MsgBox (GetNames)Funcția de sfârșit

Dacă sunteți atent când vă scrieți codul, funcția IIF vă poate economisi o mulțime de linii de cod și tastare suplimentară!

IIF-uri imbricate

Putem cuibra funcția IIF într-un mod similar cu cuibărirea funcției IF, dar încă o dată, totul se face într-o singură linie.

123 Funcția GetDiscount (dblPrice As Double) Ca DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Funcția de sfârșit

Am putea apela această funcție dintr-o sub-procedură

12345 Sub FindDiscount ()Dim dblP Ca dubludblP = 899MsgBox („Reducerea pe care o puteți obține este” & GetDiscount (dblP) și „%”)Sfârșitul Sub

sau îl puteți apela din Excel, folosindu-l ca UDF (Funcție definită de utilizator)

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave