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)