VBA If, ElseIf, Else (Ultimate Guide to If Statements)

VBA hvis erklæring

Hvis da

VBA If Statements lar deg teste om uttrykk er SANN eller FALSK, og kjører annen kode basert på resultatene.La oss se på et enkelt eksempel:
1 Hvis område ("a2"). Verdi> 0 Deretter område ("b2"). Verdi = "Positiv"
Dette tester om verdien i område A2 er større enn 0. I så fall setter du område B2 lik "positiv"Merk: Når vi tester forhold, bruker vi =,>, <,, = sammenligningsoperatorene. Vi vil diskutere dem mer detaljert senere i artikkelen.Her er syntaksen for en enkel en-linje If-setning:
1 Hvis [test_expression] så [action]
For å gjøre det lettere å lese, kan du bruke et linjefortsatte tegn (understreking) til å utvide If -setningene til to linjer (slik vi gjorde på bildet ovenfor):
12 Hvis [test_uttrykk] så _[handling]
12 Hvis område ("a2"). Verdi> 0 Så _Område ("b2"). Verdi = "Positiv"

Slutt om

Ovenstående "single-line" if-setning fungerer godt når du tester en tilstand. Men ettersom IF -setningene dine blir mer kompliserte med flere forhold, må du legge til en "End If" på slutten av if -setningen:
123 Hvis område ("a2"). Verdi> 0 DaOmråde ("b2"). Verdi = "Positiv"Slutt om

Her er syntaksen:

123 Hvis [test_expression] da[handling]Slutt om

End If betyr slutten på if -setningen.

La oss legge til en ElseIF:

ElseIF - Flere betingelser

ElseIf legges til i en eksisterende If -setning. Ellers Hvis tester om en betingelse er oppfylt KUN hvis de tidligere betingelsene ikke er oppfylt.I forrige eksempel testet vi om en celleverdi er positiv. Nå skal vi også teste om celleverdien er negativ med en ElseIf:
12345 Hvis område ("a2"). Verdi> 0 DaOmråde ("b2"). Verdi = "Positiv"ElseIf Range ("a2"). Verdi <0 DeretterOmråde ("b2"). Verdi = "Negativ"Slutt om

Du kan bruke flere ElseIfs til å teste for flere forhold:

1234567891011 Sub If_Multiple_Conditions ()If Range ("a2"). Verdi = "Cat" DaOmråde ("b2"). Verdi = "Meow"ElseIf Range ("a2"). Value = "Dog" DaOmråde ("b2"). Verdi = "Woof"ElseIf Range ("a2"). Value = "Duck" DeretterOmråde ("b2"). Verdi = "Quack"Slutt omSlutt Sub

Nå vil vi legge til en Ellers:

Ellers

De Ellers vil kjøre hvis ingen andre tidligere betingelser er oppfylt.

Vi avslutter vårt eksempel med å bruke et annet for å indikere at hvis celleverdien ikke er positiv eller negativ, må den være null:

1234567 Hvis område ("a2"). Verdi> 0 DaOmråde ("b2"). Verdi = "Positiv"ElseIf Range ("a2"). Verdi <0 DeretterOmråde ("b2"). Verdi = "Negativ"EllersOmråde ("b2"). Verdi = "Null"Slutt om

If-Else

Den vanligste typen If-setning er en enkel If-Else:

1234567 Sub If_Else ()Hvis område ("a2"). Verdi> 0 DaOmråde ("b2"). Verdi = "Positiv"EllersOmråde ("b2"). Verdi = "Ikke positiv"Slutt omSlutt Sub

Nested IFs

Du kan også “hekke” hvis uttalelser er inne i hverandre.

1234567891011 Sub Nested_Ifs ()Hvis område ("a2"). Verdi> 0 DaOmråde ("b2"). Verdi = "Positiv"EllersIf Range ("a2"). Verdi <0 DaOmråde ("b2"). Verdi = "Negativ"EllersOmråde ("b2"). Verdi = "Null"Slutt omSlutt omSlutt Sub

HVIS - Eller, Og, Xor, Ikke

Neste vil vi diskutere de logiske operatorene: Eller, Og, Xor, Not.

Hvis Or

De Eller operatør tester hvis minst én betingelse er oppfylt.

Følgende kode vil teste om verdien i område A2 er mindre enn 5000 eller større enn 10 000:

123 If Range ("a2"). Verdi 10000 DaOmråde ("b2"). Verdi = "Utenfor område"Slutt om

Du kan inkludere flere Ors på en linje:

123 Hvis Range ("a2"). Verdi 10000 Eller Range ("a2"). Verdi = 9999 DeretterOmråde ("b2"). Verdi = "Utenfor område"Slutt om

Hvis du skal bruke flere Ors, anbefales det å bruke et linjefortsettende tegn for å gjøre koden lettere å lese:

123456 If Range ("a2"). Verdi <5000 Eller _Område ("a2"). Verdi> 10000 Eller _Område ("a2"). Verdi = 9999 DeretterOmråde ("b2"). Verdi = "Utenfor område"Slutt om

Hvis Og

Operatøren And lar deg teste om ALLE betingelsene er oppfylt.

123 Hvis område ("a2"). Verdi> = 5000 og område ("a2"). Verdi <= 10000 DaOmråde ("b2"). Verdi = "In Range"Slutt om

Hvis Xor

Xor -operatøren lar deg teste om nøyaktig en betingelse er oppfylt. Hvis null betingelser er oppfylt, vil Xor returnere FALSE, hvis to eller flere betingelser er oppfylt, vil Xor også returnere usanne.

Jeg har sjelden sett Xor brukt i VBA -programmering.

Hvis ikke

Ikke -operatoren brukes til å konvertere FALSE til TRUE eller TRUE to FALSE:

123 Sub IF_Not ()MsgBox Not (True)Slutt Sub

Legg merke til at Ikke -operatoren krever at parentes rundt uttrykket byttes.

Not -operatøren kan også brukes på If -setninger:

123 Hvis ikke (Område ("a2"). Verdi> = 5000 Og Område ("a2"). Verdi <= 10000) DeretterOmråde ("b2"). Verdi = "Utenfor område"Slutt om

Hvis sammenligninger

Når du gjør sammenligninger, vil du vanligvis bruke en av sammenligningsoperatørene:

Sammenligningsoperatør Forklaring
= Lik
Ikke lik
> Større enn
>= Større enn eller lik
< Mindre enn
<= Mindre enn eller lik

Du kan imidlertid også bruke et hvilket som helst uttrykk eller funksjon som resulterer i SANN eller FALSK

If - boolsk funksjon

Når du bygger uttrykk for If -setninger, kan du også bruke hvilken som helst funksjon som genererer TRUE eller False. VBA har noen av disse funksjonene:

Funksjon Beskrivelse
IsDate Returnerer SANN hvis uttrykket er en gyldig dato
Er tom Se etter tomme celler eller udefinerte variabler
IsError Se etter feilverdier
Er Null Se etter NULL -verdi
Er Numerisk Se etter numerisk verdi

De kan kalles slik:

1 If IsEmpty (Range ("A1"). Value) Then MsgBox "Cell Empty"

Excel har også mange tilleggsfunksjoner som kan kalles ved hjelp av WorksheetFunction. Her er et eksempel på Excel IsText -funksjonen:

12 Hvis Application.WorksheetFunction.IsText (Range ("a2"). Verdi) Da _MsgBox "Celle er tekst"

Du kan også lage dine egne brukerdefinerte funksjoner (UDF). Nedenfor vil vi lage en enkel boolsk funksjon som returnerer TRUE. Da kaller vi den funksjonen i If -setningen:

1234567891011 Sub If_Function ()Hvis TrueFunction DaMsgBox "True"Slutt omSlutt SubFunksjon TrueFunction () som boolskTrueFunction = TrueSluttfunksjon

Sammenligning av tekst

Du kan også sammenligne tekst som ligner på å sammenligne tall:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Når du sammenligner tekst, må du være oppmerksom på “Etui” (øvre eller nedre). Som standard anser VBA bokstaver med forskjellige bokstaver som ikke-samsvarende. Med andre ord, "A" "a".Hvis du vil at VBA skal ignorere bokstaver, må du legge til Option Compare Text -erklæringen øverst i modulen:
1 Alternativ Sammenlign tekst

Etter å ha gitt den erklæringen “A” = “a”:
12345 Alternativ Sammenlign tekstSub If_Text ()MsgBox "a" = "A"Slutt Sub

VBA hvis du vil

VBA Like Operator lar deg gjøre unøyaktige sammenligninger av tekst. Klikk på lenken "Like Operator" for å lære mer, men vi viser et grunnleggende eksempel nedenfor:

12345678 Dim strName som strengstrName = "Mr. Charles"If strName Like "Mr*" ThenMsgBox "True"EllersMsgBox "Falsk"Slutt om

Her bruker vi en stjerne "*" jokertegn. * Står for et hvilket som helst antall tegn. Så ovennevnte If -setning vil returnere TRUE. Like-operatøren er et ekstremt kraftig, men ofte lite brukt verktøy for å håndtere tekst.

Hvis Loops

VBA Loops lar deg gjenta handlinger. Å kombinere IF-ELSE med Loops er en fin måte å raskt behandle mange beregninger på.

Fortsetter med vårt positive / negative eksempel, vil vi legge til en For hver sløyfe for å gå gjennom en rekke celler:

1234567891011121314 Sub If_Loop ()Dim Cell som RangeFor hver celle i området ("A2: A6")Hvis Cell.Value> 0 DaCell.Offset (0, 1) .Value = "Positive"ElseIf Cell.Value <0 DaCell.Offset (0, 1) .Value = "Negativ"EllersCell.Offset (0, 1) .Value = "Null"Slutt omNeste celleSlutt Sub

Hvis andre eksempler

Nå skal vi gå over noen mer spesifikke eksempler.

Sjekk om cellen er tom

Denne koden sjekker om en celle er tom. Hvis den er tom, ignorerer den cellen. Hvis den ikke er tom, sender den ut celleverdien til cellen til høyre:
1234567 Sub If_Cell_Empty ()If Range ("a2"). Value "" ThenOmråde ("b2"). Verdi = Område ("a2"). VerdiSlutt omSlutt Sub

Sjekk om cellen inneholder spesifikk tekst

Instr -funksjonen tester om det finnes en tekststreng i en annen streng. Bruk den med en If -setning for å sjekke om en celle inneholder spesifikk tekst:
123 Hvis Instr (område ("A2"). Verdi, "tekst")> 0 DeretterMsgbox "Tekst funnet"Slutt om

Sjekk om cellen inneholder tekst

Denne koden vil teste om en celle er tekst:
1234567 Sub If_Cell_Is_Text ()Hvis Application.WorksheetFunction.IsText (Range ("a2"). Verdi) DeretterMsgBox "Celle er tekst"Slutt omSlutt Sub

Hvis Goto

Du kan bruke resultatet av en If -setning til å "gå til" en annen del av koden.
12345678910 Sub IfGoTo ()If IsError (Cell.value) DaGå til HoppSlutt om'Noen koderHopp over:Slutt Sub

Slett rad hvis cellen er tom

Ved hjelp av Ifs og loops kan du teste om en celle er tom, og i så fall slette hele raden.
123456789 Sub DeleteRowIfCellBlank ()Dim Cell As RangeFor hver celle i området ("A2: A10")Hvis Cell.Value = "" Så Cell.EntireRow.DeleteNeste celleSlutt Sub

Hvis MessageBox Ja / Nei

Med VBA -meldingsbokser kan du be brukeren velge mellom flere alternativer. Ja / nei meldingsboksen ber brukeren velge Ja eller Nei. Du kan legge til en Ja / Nei meldingsboks i en prosedyre for å spørre brukeren om de vil fortsette å kjøre prosedyren eller ikke. Du håndterer brukerens innspill ved hjelp av en If -setning.Her er Ja/Nei meldingsboksen i praksis:
123456789101112 Sub MsgBoxVariable ()Dim svar som heltallanswer = MsgBox ("Vil du fortsette?", vbQuestion + vbYesNo)Hvis svar = vbJa DaMsgBox "Ja"EllersMsgBox "Nei"Slutt omSlutt Sub

VBA If, ElseIf, Else i Access VBA

Funksjonene If, ​​ElseIf og Else fungerer nøyaktig det samme i Access VBA som i Excel VBA.

Du kan bruke en If -setning for å kontrollere om det er poster i et postsett.

wave wave wave wave wave