Izjava VBA If

Če, potem
VBA Če vam stavki omogočajo, da preizkusite, ali so izrazi TRUE ali FALSE, se na podlagi rezultatov izvede drugačna koda.Poglejmo preprost primer:
1 | Če je obseg ("a2"). Vrednost> 0 Potem obseg ("b2"). Vrednost = "pozitivno" |
S tem se preveri, ali je vrednost v območju A2 večja od 0. Če je tako, nastavite obseg B2 na »Pozitivno«

Opomba: Pri preskusnih pogojih bomo uporabili operatorje za primerjavo =,>, <,, =. Podrobneje jih bomo obravnavali kasneje v članku.Tukaj je sintaksa preproste enovrstične izjave If:
1 | Če [test_expression], potem [dejanje] |
Za lažje branje lahko z znakom za nadaljevanje vrstice (podčrtaj) razširite stavke If na dve vrstici (kot smo to storili na zgornji sliki):
12 | Če [test_expression] potem _[dejanje] |
12 | Če je obseg ("a2"). Vrednost> 0 Potem _Razpon ("b2"). Vrednost = "Pozitivno" |
Konec Če
Zgornji stavek "eno vrstica" if dobro deluje, ko preizkušate en pogoj. Ker pa se vaše izjave IF z več pogoji zapletejo, boste morali na konec stavka if dodati »End If«:
123 | Če je obseg ("a2"). Vrednost> 0 PotemRazpon ("b2"). Vrednost = "Pozitivno"Konec Če |
Tukaj je sintaksa:
123 | Če [test_expression] potem[dejanje]Konec Če |
Konec If pomeni konec stavka if.
Zdaj pa dodajmo še ElSIF:
ElseIF - Več pogojev
ElseIf se doda obstoječemu stavku If. V nasprotnem primeru preveri, če je pogoj izpolnjen
SAMO, če prejšnji pogoji niso izpolnjeni.V prejšnjem primeru smo preverili, ali je vrednost celice pozitivna. Zdaj bomo preizkusili tudi, ali je vrednost celice negativna z ElseIf:
12345 | Če je obseg ("a2"). Vrednost> 0 PotemRazpon ("b2"). Vrednost = "Pozitivno"ElseIf Range ("a2"). Vrednost <0 PotemRazpon ("b2"). Vrednost = "Negativno"Konec Če |

Za testiranje več pogojev lahko uporabite več ElseIfs:
1234567891011 | Sub If_Multiple_Conditions ()Če Range ("a2"). Value = "Cat" PotemRazpon ("b2"). Vrednost = "Meow"ElseIf Range ("a2"). Value = "Dog" PotemRazpon ("b2"). Vrednost = "Woof"ElseIf Range ("a2"). Value = "Duck" PotemRange ("b2"). Value = "Quack"Konec ČeEnd Sub |

Zdaj bomo dodali an Sicer pa:
Sicer pa
The Sicer pa bo tekel, če drugi prejšnji pogoji niso bili izpolnjeni.
Naš primer bomo zaključili z uporabo Else, ki označuje, da če vrednost celice ni pozitivna ali negativna, potem mora biti nič:
1234567 | Če je obseg ("a2"). Vrednost> 0 PotemRazpon ("b2"). Vrednost = "Pozitivno"ElseIf Range ("a2"). Vrednost <0 PotemRazpon ("b2"). Vrednost = "Negativno"Sicer paRazpon ("b2"). Vrednost = "nič"Konec Če |
Če potem
Najpogostejša vrsta stavka If je preprost If-Else:
1234567 | Sub If_Else ()Če je obseg ("a2"). Vrednost> 0 PotemRazpon ("b2"). Vrednost = "Pozitivno"Sicer paRazpon ("b2"). Vrednost = "Ni pozitivno"Konec ČeEnd Sub |

Vgnezdeni IF -ji
Lahko tudi "ugnezdite", če izjave drug v drugem.
1234567891011 | Sub Nested_Ifs ()Če je obseg ("a2"). Vrednost> 0 PotemRazpon ("b2"). Vrednost = "Pozitivno"Sicer paČe je obseg ("a2"). Vrednost <0 PotemRazpon ("b2"). Vrednost = "Negativno"Sicer paRazpon ("b2"). Vrednost = "nič"Konec ČeKonec ČeEnd Sub |

ČE - Ali, In, Xor, Ne
Nato bomo razpravljali o logičnih operaterjih: Ali, In, Xor, Ne.
Če Or
The Or operaterjevi testi, če je izpolnjen vsaj en pogoj.
Naslednja koda bo preverila, ali je vrednost v območju A2 manjša od 5.000 ali večja od 10.000:
123 | Če Range ("a2"). Vrednost 10000 PotemRazpon ("b2"). Vrednost = "Izven območja"Konec Če |

V eno vrstico lahko vključite več Ors:
123 | Če je obseg ("a2"). Vrednost 10000 ali obseg ("a2"). Vrednost = 9999 PotemRazpon ("b2"). Vrednost = "Izven območja"Konec Če |
Če boste uporabljali več Ors, je za lažje branje kode priporočljivo uporabiti znak za nadaljevanje vrstice:
123456 | Če je obseg ("a2"). Vrednost <5000 Ali _Razpon ("a2"). Vrednost> 10000 Ali _Razpon ("a2"). Vrednost = 9999 PotemRazpon ("b2"). Vrednost = "Izven območja"Konec Če |

Če And
Operater And vam omogoča, da preizkusite, če Izpolnjeni so VSI pogoji.
123 | Če je obseg ("a2"). Vrednost> = 5000 In obseg ("a2"). Vrednost <= 10000 PotemRazpon ("b2"). Vrednost = "V dosegu"Konec Če |

Če Xor
Operater Xor vam omogoča, da preizkusite, če izpolnjen je točno en pogoj. Če so izpolnjeni nič pogoji, bo Xor vrnil FALSE, če sta izpolnjena dva ali več pogojev, bo Xor vrnil tudi false.
Redko sem videl, da se Xor uporablja pri programiranju VBA.
Če ne
Operater Not se uporablja za pretvorbo FALSE v TRUE ali TRUE v FALSE:
123 | Sub IF_Not ()MsgBox Not (True)End Sub |
Upoštevajte, da operator Not zahteva oklepaje, ki obkrožajo izraz za preklop.
Operatorja Not je mogoče uporabiti tudi za stavke If:
123 | Če ne (Razpon ("a2"). Vrednost> = 5000 In Razpon ("a2"). Vrednost <= 10000) NatoRazpon ("b2"). Vrednost = "Izven območja"Konec Če |

Če primerjave
Pri primerjavah običajno uporabite enega od operaterjev za primerjavo:
Primerjalni operater | Pojasnilo |
= | Enako |
| Ni enako |
> | Večji kot |
>= | Večji ali enak |
< | Manj kot |
<= | Manj ali enako |
Lahko pa uporabite tudi kateri koli izraz ali funkcijo kar ima za posledico TRUE ali FALSE
Če - Booleova funkcija
Pri sestavljanju izrazov za stavke If lahko uporabite tudi katero koli funkcijo, ki ustvari TRUE ali False. VBA ima nekaj teh funkcij:
Funkcija | Opis |
IsDate | Vrne TRUE, če je izraz veljaven datum |
Je prazno | Preverite prazne celice ali nedoločene spremenljivke |
IsError | Preverite vrednosti napak |
IsNull | Preverite NULL vrednost |
JeNumerično | Preverite številčno vrednost |
Lahko jih imenujemo tako:
1 | Če je IsEmpty (obseg ("A1"). Vrednost), potem sporočilo "Cell Empty" |
Excel ima tudi številne dodatne funkcije, ki jih je mogoče poklicati s funkcijo WorksheetFunction. Tu je primer funkcije Excel IsText:
12 | Če Application.WorksheetFunction.IsText (Razpon ("a2"). Vrednost) Nato _MsgBox "Celica je besedilo" |
Ustvarite lahko tudi lastne uporabniško določene funkcije (UDF). Spodaj bomo ustvarili preprosto logično funkcijo, ki vrne TRUE. Nato bomo to funkcijo poklicali v stavku If:
1234567891011 | Sub If_Function ()Če TrueFunction PotemMsgBox "True"Konec ČeEnd SubFunkcija TrueFunction () Kot logična vrednostTrueFunction = TrueKončana funkcija |

Primerjava besedila
Besedilo lahko primerjate tudi s primerjavo števil:
Ko primerjate besedilo, morate biti pozorni na »Velikost« (zgornjo ali spodnjo). VBA privzeto meni, da se črke z različnimi velikimi črkami ne ujemajo. Z drugimi besedami, "A" "a".Če želite, da VBA prezre velike in male črke, morate na vrh modula dodati izjavo Option Compare Text:
1 | Možnost Primerjaj besedilo |
Po podani izjavi "A" = "a":
12345 | Možnost Primerjaj besediloSub If_Text ()MsgBox "a" = "A"End Sub |
VBA, če je všeč
Operater VBA Like Operator vam omogoča, da naredite nenatančne primerjave besedila. Če želite izvedeti več, kliknite povezavo »Všeč mi je operater«, vendar bomo spodaj prikazali osnovni primer:
12345678 | Zatemni strName kot nizstrName = "gospod Charles"Če strName kot "gospod*", potemMsgBox "True"Sicer paMsgBox "False"Konec Če |
Tukaj uporabljamo zvezdico »*« kot nadomestni znak. * Pomeni poljubno število znakov. Torej zgornji stavek If vrne TRUE. Operater Like je izjemno močno, a pogosto premalo uporabljeno orodje za obravnavo besedila.
Če zanke
Zanke VBA vam omogočajo ponavljanje dejanj. Združevanje IF-ELSE z zankami je odličen način za hitro obdelavo številnih izračunov.
Nadaljujemo z našim pozitivnim / negativnim primerom, zato bomo za vsako zanko dodali krog po vrsti celic:
1234567891011121314 | Sub If_Loop ()Zatemni celico kot obsegZa vsako celico v razponu ("A2: A6")Če je Cell.Value> 0, potemCell.Offset (0, 1) .Value = "Pozitivno"ElseIf Cell.Value <0 PotemCell.Offset (0, 1) .Value = "Negativno"Sicer paCell.Offset (0, 1) .Value = "Nič"Konec ČeNaslednja celicaEnd Sub |
Če so drugi primeri
Zdaj bomo preučili nekaj bolj specifičnih primerov.
Preverite, ali je celica prazna
Ta koda bo preverila, ali je celica prazna. Če je prazna, ne upošteva celice. Če ni prazno, bo vrednost celice prikazala v celici na desni:
1234567 | Sub If_Cell_Empty ()Če Range ("a2"). Vrednost "" PotemRazpon ("b2"). Vrednost = Razpon ("a2"). VrednostKonec ČeEnd Sub |
Preverite, ali celica vsebuje določeno besedilo
Funkcija Instr preveri, ali je niz besedila v drugem nizu. Uporabite ga z izjavo If, da preverite, ali celica vsebuje določeno besedilo:
123 | Če je Instr (Razpon ("A2"). Vrednost, "besedilo")> 0 PotemMsgbox "Besedilo je najdeno"Konec Če |
Preverite, ali celica vsebuje besedilo
Ta koda bo preverila, ali je celica besedilo:
1234567 | Sub If_Cell_Is_Text ()Če Application.WorksheetFunction.IsText (Razpon ("a2"). Vrednost) NatoMsgBox "Celica je besedilo"Konec ČeEnd Sub |
Če greš
Rezultat stavka If lahko uporabite za "Pojdi na" drug del kode.
12345678910 | Sub IfGoTo ()Če je IsError (Cell.value) PotemPojdi PreskočiKonec Če"Nekaj kodeksaPreskoči:End Sub |
Izbriši vrstico, če je celica prazna
S pomočjo ifs in zank lahko preizkusite, ali je celica prazna, in če je tako, izbrišite celotno vrstico.
123456789 | Sub DeleteRowIfCellBlank ()Dim Cell As RangeZa vsako celico v razponu ("A2: A10")Če je Cell.Value = "" Potem Cell.EntireRow.DeleteNaslednja celicaEnd Sub |
Če MessageBox Da / Ne
Z okenci za sporočila VBA lahko od uporabnika zahtevate izbiro med več možnostmi. Polje za sporočila Da / Ne od uporabnika zahteva, da izbere Da ali Ne. Postopku lahko dodate polje Da / Ne, da vprašate uporabnika, ali želi nadaljevati postopek ali ne. Z vnosom uporabnika upravljate z stavkom If.Tukaj je polje za sporočila da/ne:
123456789101112 | Sub MsgBoxVariable ()Zatemnjen odgovor kot celo številoanswer = MsgBox ("Ali želite nadaljevati?", vbQuestion + vbDa Ne)Če je odgovor = vbDaMsgBox "Da"Sicer paMsgBox "Ne"Konec ČeEnd Sub |
VBA Če, drugače, V Accessu VBA
Funkcije If, ElseIf in Else v Access VBA delujejo popolnoma enako kot v Excelu VBA.
Z stavkom If lahko preverite, ali so v nizu zapisov zapisi.
