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:
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.
