Declarație VBA If

Daca atunci
VBA Dacă Instrucțiunile vă permit să testați dacă expresiile sunt ADEVĂRATE sau FALSE, rularea unui cod diferit pe baza rezultatelor.Să vedem un exemplu simplu:
1 | Dacă Range ("a2"). Valoare> 0 Apoi Range ("b2"). Value = "Positive" |
Aceasta testează dacă valoarea din Gama A2 este mai mare de 0. Dacă da, setați Gama B2 egal cu „Pozitiv”

Notă: La testarea condițiilor vom folosi operatorii de comparație =,>, <,, =. Le vom discuta mai detaliat mai târziu în articol.Iată sintaxa pentru o instrucțiune If cu o singură linie:
1 | Dacă [test_expression] atunci [action] |
Pentru a ușura citirea, puteți utiliza un caracter Continuare linie (subliniere) pentru a extinde Instrucțiunile If la două linii (așa cum am făcut în imaginea de mai sus):
12 | Dacă [test_expression] atunci _[acțiune] |
12 | Dacă Range ("a2"). Valoare> 0 Atunci _Interval ("b2"). Valoare = "Pozitiv" |
End If
Instrucțiunea „single-line” if de mai sus funcționează bine atunci când testați o condiție. Dar pe măsură ce declarațiile IF devin mai complicate cu condiții multiple, va trebui să adăugați un „End If” la sfârșitul declarației if:
123 | Dacă Range ("a2"). Valoare> 0 AtunciInterval ("b2"). Valoare = "Pozitiv"End If |
Aici sintaxa este:
123 | Dacă [test_expression] atunci[acțiune]End If |
Sfârșitul If înseamnă sfârșitul declarației if.
Acum să adăugăm un ElseIF:
ElseIF - Condiții multiple
ElseIf este adăugat la o instrucțiune If existentă. Altfel Dacă testează dacă este îndeplinită o condiție
DOAR dacă nu au fost îndeplinite condițiile anterioare.În exemplul anterior am testat dacă valoarea unei celule este pozitivă. Acum vom testa, de asemenea, dacă valoarea celulei este negativă cu un ElseIf:
12345 | Dacă Range ("a2"). Valoare> 0 AtunciInterval ("b2"). Valoare = "Pozitiv"ElseIf Range ("a2"). Valoare <0 ApoiInterval ("b2"). Valoare = "Negativ"End If |

Puteți utiliza mai multe ElseIfs pentru a testa condiții multiple:
1234567891011 | Sub If_Multiple_Conditions ()Dacă Range ("a2"). Value = "Cat" AtunciGama ("b2"). Valoare = "Miau"ElseIf Range ("a2"). Value = "Dog" ApoiInterval ("b2"). Valoare = "Woof"ElseIf Range ("a2"). Value = "Duck" ApoiGama ("b2"). Valoare = "Quack"End IfSfârșitul Sub |

Acum vom adăuga un Altfel:
Altfel
The Altfel va rula dacă nu au fost îndeplinite alte condiții anterioare.
Vom termina exemplul nostru folosind un alt element pentru a indica faptul că dacă valoarea celulei nu este pozitivă sau negativă, atunci trebuie să fie zero:
1234567 | Dacă Range ("a2"). Valoare> 0 AtunciInterval ("b2"). Valoare = "Pozitiv"ElseIf Range ("a2"). Valoare <0 ApoiInterval ("b2"). Valoare = "Negativ"AltfelInterval ("b2"). Valoare = "Zero"End If |
Dacă-Altfel
Cel mai comun tip de declarație If este un If-Else simplu:
1234567 | Sub If_Else ()Dacă Range ("a2"). Valoare> 0 AtunciInterval ("b2"). Valoare = "Pozitiv"AltfelInterval ("b2"). Valoare = "Nu este pozitiv"End IfSfârșitul Sub |

IF-uri imbricate
Puteți, de asemenea, să „cuibăriți” dacă sunt afirmații unul în celălalt.
1234567891011 | Sub Nested_Ifs ()Dacă Range ("a2"). Valoare> 0 AtunciInterval ("b2"). Valoare = "Pozitiv"AltfelDacă Range ("a2"). Valoare <0 AtunciInterval ("b2"). Valoare = "Negativ"AltfelInterval ("b2"). Valoare = "Zero"End IfEnd IfSfârșitul Sub |

DACĂ - Sau, Și, Xor, nu
În continuare vom discuta despre operatorii logici: Sau, Și, Xor, Nu.
Dacă Or
The Sau testele operatorului dacă cel puțin o condiție este îndeplinită.
Următorul cod va testa dacă valoarea din Gama A2 este mai mică de 5.000 sau mai mare de 10.000:
123 | Dacă Range ("a2"). Valoare 10000 AtunciRange ("b2"). Value = "Out of Range"End If |

Puteți include mai multe OR-uri într-o singură linie:
123 | Dacă Range ("a2"). Valoare 10000 Sau Range ("a2"). Value = 9999 ApoiRange ("b2"). Value = "Out of Range"End If |
Dacă doriți să utilizați mai multe OR-uri, este recomandat să utilizați un caracter de continuare a liniei pentru a vă ușura citirea codului:
123456 | Dacă Range ("a2"). Valoare <5000 Sau _Gama („a2”). Valoare> 10000 Sau _Gama („a2”). Valoare = 9999 ApoiRange ("b2"). Value = "Out of Range"End If |

Dacă Și
Operatorul And vă permite să testați dacă TOATE condițiile sunt îndeplinite.
123 | Dacă Range ("a2"). Valoare> = 5000 Și Range ("a2"). Value <= 10000 AtunciRange ("b2"). Value = "In Range"End If |

Dacă Xor
Operatorul Xor vă permite să testați dacă exact o condiție este îndeplinită. Dacă sunt îndeplinite condițiile zero, Xor va returna FALS, Dacă sunt îndeplinite două sau mai multe condiții, Xor va returna, de asemenea, fals.
Am văzut rar Xor folosit în programarea VBA.
Dacă nu
Operatorul Not este utilizat pentru a converti FALS în ADEVĂRAT sau ADEVĂRAT în FALS:
123 | Sub IF_Not ()MsgBox Not (True)Sfârșitul Sub |
Observați că operatorul Not necesită paranteză în jurul expresiei pentru a comuta.
Operatorul Not poate fi aplicat și instrucțiunilor If:
123 | Dacă nu (Interval ("a2"). Valoare> = 5000 Și Interval ("a2"). Valoare <= 10000) ApoiRange ("b2"). Value = "Out of Range"End If |

Dacă Comparații
Când faceți comparații, veți utiliza de obicei unul dintre operatorii de comparație:
Operator de comparație | Explicaţie |
= | Egal cu |
| Nu este egal cu |
> | Mai mare ca |
>= | Mai mare sau egal cu |
< | Mai puțin decât |
<= | Mai mic sau egal cu |
Cu toate acestea, puteți utiliza și orice expresie sau funcție care are ca rezultat ADEVĂRAT sau FALS
Dacă - Funcție booleană
Când creați expresii pentru Instrucțiuni If, puteți utiliza, de asemenea, orice funcție care generează TRUE sau False. VBA are câteva dintre aceste funcții:
Funcţie | Descriere |
IsDate | Returnează TRUE dacă expresia este o dată validă |
Este gol | Verificați dacă există celule goale sau variabile nedefinite |
IsError | Verificați dacă există valori de eroare |
IsNull | Verificați valoarea NULL |
IsNumeric | Verificați valoarea numerică |
Se pot numi astfel:
1 | Dacă IsEmpty (Interval ("A1"). Valoare), atunci MsgBox "Cell Empty" |
Excel are, de asemenea, multe funcții suplimentare care pot fi numite folosind WorksheetFunction. Iată un exemplu al funcției Excel IsText:
12 | Dacă Application.WorksheetFunction.IsText (Range ("a2"). Value) Atunci _MsgBox „Celula este text” |
De asemenea, puteți crea propriile funcții definite de utilizator (UDF). Mai jos vom crea o funcție booleană simplă care returnează TRUE. Apoi vom apela acea funcție în instrucțiunea noastră If:
1234567891011 | Sub If_Function ()Dacă TrueFunction atunciMsgBox „Adevărat”End IfSfârșitul SubFuncția TrueFunction () Ca BooleanTrueFunction = AdevăratFuncția de sfârșit |

Compararea textului
De asemenea, puteți compara un text similar cu cel de comparare a numerelor:
Când comparați text, trebuie să aveți în vedere „majuscule” (superior sau inferior). În mod implicit, VBA consideră literele cu cazuri diferite ca nepotrivite. Cu alte cuvinte, „A” „a”.Dacă doriți ca VBA să ignore majuscule, trebuie să adăugați declarația Opțiunea de comparare a textului în partea de sus a modulului:
1 | Opțiune Comparați textul |
După ce ați făcut acea declarație „A” = „a”:
12345 | Opțiune Comparați textulSub If_Text ()MsgBox "a" = "A"Sfârșitul Sub |
VBA Dacă doriți
VBA Like Operator vă permite să faceți comparații inexacte ale textului. Faceți clic pe linkul „Apreciați operatorul” pentru a afla mai multe, dar vom afișa un exemplu de bază mai jos:
12345678 | Dim strName ca ȘirstrName = "Domnul Charles"Dacă strName Ca „Mr. *” AtunciMsgBox „Adevărat”AltfelMsgBox „Fals”End If |
Aici folosim un asterisc „*” cu metacaracter. * Reprezintă orice număr de caractere. Deci, declarația If de mai sus va reveni ADEVĂRAT. Operatorul Like este un instrument extrem de puternic, dar de multe ori subutilizat pentru tratarea textului.
Dacă Bucle
Buclele VBA vă permit să repetați acțiuni. Combinarea IF-ELSEs cu Loops este o modalitate excelentă de a procesa rapid multe calcule.
Continuând cu exemplul nostru pozitiv / negativ, vom adăuga un Pentru fiecare buclă pentru a parcurge o gamă de celule:
1234567891011121314 | Sub If_Loop ()Dim Cell ca RangePentru fiecare celulă din interval („A2: A6”)Dacă Cell.Value> 0 AtunciCell.Offset (0, 1) .Value = "Pozitiv"ElseIf Cell.Value <0 ApoiCell.Offset (0, 1) .Value = "Negativ"AltfelCell.Offset (0, 1) .Value = "Zero"End IfUrmătoarea celulăSfârșitul Sub |
Dacă altele Exemple
Acum vom trece în revistă câteva exemple mai specifice.
Verificați dacă celula este goală
Acest cod va verifica dacă o celulă este goală. Dacă este goală, va ignora celula. Dacă nu este gol, va afișa valoarea celulei în celula din dreapta:
1234567 | Sub If_Cell_Empty ()Dacă Range ("a2"). Valoare "" AtunciInterval ("b2"). Valoare = Interval ("a2"). ValoareEnd IfSfârșitul Sub |
Verificați dacă celula conține text specific
Funcția Instr testează dacă un șir de text se găsește într-un alt șir. Folosiți-o cu o instrucțiune If pentru a verifica dacă o celulă conține text specific:
123 | Dacă Instr (Range ("A2"). Valoare, "text")> 0 AtunciMesaj "Text găsit"End If |
Verificați dacă celula conține text
Acest cod va testa dacă o celulă este text:
1234567 | Sub If_Cell_Is_Text ()Dacă Application.WorksheetFunction.IsText (Range ("a2"). Value) AtunciMsgBox „Celula este text”End IfSfârșitul Sub |
Dacă Goto
Puteți folosi rezultatul unei instrucțiuni If pentru a „merge la” o altă secțiune de cod.
12345678910 | Sub IfGoTo ()Dacă IsError (Cell.value) atunciTreci pesteEnd If- Un codOcolire:Sfârșitul Sub |
Ștergeți rândul dacă celula este necompletată
Folosind Ifs și bucle puteți testa dacă o celulă este goală și, în caz afirmativ, ștergeți întregul rând.
123456789 | Sub DeleteRowIfCellBlank ()Dim Cell As RangePentru fiecare celulă din interval („A2: A10”)Dacă Cell.Value = "" Atunci Cell.EntireRow.DeleteUrmătoarea celulăSfârșitul Sub |
Dacă MessageBox Da / Nu
Cu casetele de mesaje VBA puteți solicita utilizatorului să selecteze dintre mai multe opțiuni. Caseta de mesaje Da / Nu cere utilizatorului să selecteze Da sau Nu. Puteți adăuga o Casetă de mesaje Da / Nu la o procedură pentru a întreba utilizatorul dacă dorește să ruleze procedura sau nu. Vă ocupați de introducerea utilizatorului utilizând o instrucțiune If.Iată Caseta de mesaje Da / Nu în practică:
123456789101112 | Sub MsgBoxVariable ()Răspuns slab Ca întreganswer = MsgBox („Vrei să continui?”, vbQuestion + vbYesNo)Dacă răspuns = vbDa atunciMsgBox „Da”AltfelMsgBox „Nu”End IfSfârșitul Sub |
VBA If, ElseIf, Else în Access VBA
Funcțiile If, ElseIf și Else funcționează exact la fel în Access VBA ca în Excel VBA.
Puteți utiliza o declarație If pentru a verifica dacă există înregistrări într-un set de înregistrări.
