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

VBA -erklæring

Hvis så

VBA Hvis sætninger giver dig mulighed for at teste, om udtryk er SAND eller FALSK, kører en anden kode baseret på resultaterne.Lad os se på et enkelt eksempel:
1 Hvis område ("a2"). Værdi> 0 Så område ("b2"). Værdi = "Positiv"
Dette tester, om værdien i område A2 er større end 0. Hvis ja, indstilles område B2 lig med "Positive"Bemærk: Ved test af betingelser vil vi bruge =,>, <,, = sammenligningsoperatorer. Vi vil diskutere dem mere detaljeret senere i artiklen.Her er syntaksen til en simpel If-sætning på én linje:
1 Hvis [test_expression] så [handling]
For at gøre det lettere at læse kan du bruge et linjefortsætningstegn (understregning) til at udvide If -sætningerne til to linjer (som vi gjorde på billedet ovenfor):
12 Hvis [test_expression] så _[handling]
12 Hvis område ("a2"). Værdi> 0 Så _Område ("b2"). Værdi = "Positiv"

Afslut Hvis

Ovenstående "single-line" if-sætning fungerer godt, når du tester en tilstand. Men efterhånden som dine IF -erklæringer bliver mere komplicerede med flere betingelser, skal du tilføje en "End If" til slutningen af ​​if -sætningen:
123 Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"Afslut Hvis

Her er syntaksen:

123 Hvis [test_expression] så[handling]Afslut Hvis

Afslutningen Hvis angiver slutningen på if -sætningen.

Lad os nu tilføje et ElseIF:

ElseIF - Flere betingelser

ElseIf tilføjes til en eksisterende If -sætning. Ellers Hvis tester, om en betingelse er opfyldt KUN hvis de tidligere betingelser ikke er opfyldt.I det foregående eksempel testede vi, om en celleværdi er positiv. Nu vil vi også teste, om celleværdien er negativ med en ElseIf:
12345 Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"ElseIf Range ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"Afslut Hvis

Du kan bruge flere ElseIfs til at teste for flere forhold:

1234567891011 Sub If_Multiple_Conditions ()Hvis rækkevidde ("a2"). Værdi = "Kat" SåOmråde ("b2"). Værdi = "Meow"ElseIf Range ("a2"). Value = "Dog" HerefterOmråde ("b2"). Værdi = "Woof"ElseIf Range ("a2"). Værdi = "And" SåOmråde ("b2"). Værdi = "Quack"Afslut HvisAfslut Sub

Nu tilføjer vi en Andet:

Andet

Det Andet vil køre hvis ingen andre tidligere betingelser er opfyldt.

Vi afslutter vores eksempel ved at bruge en anden til at angive, at hvis celleværdien ikke er positiv eller negativ, skal den være nul:

1234567 Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"ElseIf Range ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"AndetOmråde ("b2"). Værdi = "Nul"Afslut Hvis

Hvis ellers

Den mest almindelige type If-sætning er en simpel If-Else:

1234567 Sub If_Else ()Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"AndetOmråde ("b2"). Værdi = "Ikke positiv"Afslut HvisAfslut Sub

Indlejrede IF'er

Du kan også “rede”, hvis udsagn inde i hinanden.

1234567891011 Sub Nested_Ifs ()Hvis område ("a2"). Værdi> 0 DerefterOmråde ("b2"). Værdi = "Positiv"AndetHvis område ("a2"). Værdi <0 HerefterOmråde ("b2"). Værdi = "Negativ"AndetOmråde ("b2"). Værdi = "Nul"Afslut HvisAfslut HvisAfslut Sub

HVIS - Eller, Og, Xor, Ikke

Dernæst vil vi diskutere de logiske operatorer: Eller, Og, Xor, Not.

Hvis Or

Det Eller operatør tester hvis mindst én betingelse er opfyldt.

Følgende kode tester, om værdien i område A2 er mindre end 5.000 eller større end 10.000:

123 Hvis område ("a2"). Værdi 10000 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis

Du kan inkludere flere Ors i en linje:

123 Hvis område ("a2"). Værdi 10000 Eller område ("a2"). Værdi = 9999 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis

Hvis du vil bruge flere Ors, anbefales det at bruge en linjefortsættelse for at gøre din kode lettere at læse:

123456 Hvis område ("a2"). Værdi <5000 Eller _Område ("a2"). Værdi> 10000 Eller _Område ("a2"). Værdi = 9999 DerefterOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis

Hvis Og

Operatøren And giver dig mulighed for at teste, om ALLE betingelser er opfyldt.

123 Hvis område ("a2"). Værdi> = 5000 og rækkevidde ("a2"). Værdi <= 10000 DerefterOmråde ("b2"). Værdi = "In Range"Afslut Hvis

Hvis Xor

Xor -operatøren giver dig mulighed for at teste, om præcis én betingelse er opfyldt. Hvis nul betingelser er opfyldt, returnerer Xor FALSKT, hvis to eller flere betingelser er opfyldt, returnerer Xor også falsk.

Jeg har sjældent set Xor brugt i VBA -programmering.

Hvis ikke

Operatoren Ikke bruges til at konvertere FALSK til SAND eller SAND til FALSK:

123 Sub IF_Not ()MsgBox Ikke (sandt)Afslut Sub

Bemærk, at operatoren Ikke kræver, at parentes omkring udtrykket skifter.

Operatoren Not kan også anvendes på If -sætninger:

123 Hvis ikke (område ("a2"). Værdi> = 5000 og område ("a2"). Værdi <= 10000) SåOmråde ("b2"). Værdi = "Uden for område"Afslut Hvis

Hvis sammenligninger

Når du foretager sammenligninger, vil du normalt bruge en af ​​sammenligningsoperatorerne:

Sammenligningsoperatør Forklaring
= Svarende til
Ikke lig med
> Bedre end
>= Større end eller lig med
< Mindre end
<= Mindre end eller lig med

Du kan dog også bruge ethvert udtryk eller funktion der resulterer i SAND eller FALSK

If - boolsk funktion

Når du bygger udtryk for If -sætninger, kan du også bruge enhver funktion, der genererer SAND eller Falsk. VBA har et par af disse funktioner:

Fungere Beskrivelse
IsDate Returnerer SAND, hvis udtrykket er en gyldig dato
Er tom Kontroller, om der er tomme celler eller udefinerede variabler
ErError Kontroller for fejlværdier
Er Null Tjek for NULL -værdi
Er Numerisk Kontroller numerisk værdi

De kan kaldes sådan:

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

Excel har også mange ekstra funktioner, der kan kaldes ved hjælp af WorksheetFunction. Her er et eksempel på Excel IsText -funktionen:

12 Hvis Application.WorksheetFunction.IsText (Range ("a2"). Værdi) Så _MsgBox "Celle er tekst"

Du kan også oprette dine egne brugerdefinerede funktioner (UDF'er). Nedenfor vil vi oprette en enkel boolsk funktion, der returnerer SAND. Så kalder vi den funktion i vores If -sætning:

1234567891011 Sub If_Function ()Hvis TrueFunction SåMsgBox "True"Afslut HvisAfslut SubFunktion TrueFunction () Som boolskTrueFunction = TrueAfslut funktion

Sammenligning af tekst

Du kan også sammenligne tekst, der ligner sammenligning af tal:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Når du sammenligner tekst, skal du være opmærksom på "Case" (øvre eller nedre). Som standard betragter VBA bogstaver med forskellige sager som ikke-matchende. Med andre ord "A" "a".Hvis du vil have, at VBA ignorerer store og små bogstaver, skal du tilføje muligheden Sammenlign tekstdeklaration øverst i dit modul:
1 Mulighed Sammenlign tekst

Efter at have givet denne erklæring "A" = "a":
12345 Mulighed Sammenlign tekstSub If_Text ()MsgBox "a" = "A"Afslut Sub

VBA Hvis du kan lide

VBA Like Operator giver dig mulighed for at foretage unøjagtige sammenligninger af tekst. Klik på linket "Like Operator" for at lære mere, men vi viser et grundlæggende eksempel herunder:

12345678 Dim strName som strengstrName = "Mr. Charles"Hvis strName Som "Mr*" SåMsgBox "True"AndetMsgBox "Falsk"Afslut Hvis

Her bruger vi en stjerne "*" wildcard. * Står for et vilkårligt antal tegn. Så ovenstående If -sætning returnerer SAND. Like-operatoren er et ekstremt kraftfuldt, men ofte underudnyttet værktøj til håndtering af tekst.

Hvis Loops

VBA Loops giver dig mulighed for at gentage handlinger. At kombinere IF-ELSE med Loops er en fantastisk måde at hurtigt behandle mange beregninger på.

I fortsættelse af vores positive / negative eksempel tilføjer vi en For hver sløjfe til at gå gennem en række celler:

1234567891011121314 Sub If_Loop ()Dim celle som rækkeviddeFor hver celle i området ("A2: A6")Hvis Cell.Value> 0 SåCell.Offset (0, 1) .Værdi = "Positiv"ElseIf Cell.Value <0 HerefterCell.Offset (0, 1) .Value = "Negativ"AndetCell.Offset (0, 1) .Value = "Nul"Afslut HvisNæste celleAfslut Sub

Hvis andre eksempler

Nu vil vi gå over nogle mere specifikke eksempler.

Kontroller, om cellen er tom

Denne kode vil kontrollere, om en celle er tom. Hvis den er tom, ignorerer den cellen. Hvis den ikke er tom, udsender den celleværdien til cellen til højre:
1234567 Sub If_Cell_Empty ()Hvis område ("a2"). Værdi "" SåOmråde ("b2"). Værdi = Område ("a2"). VærdiAfslut HvisAfslut Sub

Kontroller, om cellen indeholder specifik tekst

Instr -funktionen tester, om der findes en tekststreng i en anden streng. Brug den sammen med en If -sætning for at kontrollere, om en celle indeholder specifik tekst:
123 Hvis Instr (område ("A2"). Værdi, "tekst")> 0 DerefterMsgbox "Tekst fundet"Afslut Hvis

Kontroller, om cellen indeholder tekst

Denne kode tester, om en celle er tekst:
1234567 Sub If_Cell_Is_Text ()Hvis Application.WorksheetFunction.IsText (Range ("a2"). Værdi) DerefterMsgBox "Celle er tekst"Afslut HvisAfslut Sub

Hvis Goto

Du kan bruge resultatet af en If -sætning til "Gå til" en anden sektion af kode.
12345678910 Sub IfGoTo ()Hvis IsError (Cell.value) SåGå overAfslut Hvis'Nogle koderSpringe:Afslut Sub

Slet række, hvis cellen er tom

Ved hjælp af Ifs og loops kan du teste, om en celle er tom, og i så fald slette hele rækken.
123456789 Sub DeleteRowIfCellBlank ()Dim celle som rækkeviddeFor hver celle i området ("A2: A10")Hvis Cell.Value = "" Så Cell.EntireRow.DeleteNæste celleAfslut Sub

Hvis MessageBox Ja / Nej

Med VBA -meddelelsesbokse kan du bede brugeren om at vælge mellem flere muligheder. Ja / nej -meddelelsesboksen beder brugeren om at vælge Ja eller Nej. Du kan tilføje en Ja / Nej -meddelelsesboks til en procedure for at spørge brugeren, om de vil fortsætte med at køre proceduren eller ej. Du håndterer brugerens input ved hjælp af en If -sætning.Her er Ja/Nej -meddelelsesboksen i praksis:
123456789101112 Sub MsgBoxVariable ()Dim svar som heltalanswer = MsgBox ("Vil du fortsætte?", vbQuestion + vbYesNo)Hvis svar = vbJa SåMsgBox "Ja"AndetMsgBox "Nej"Afslut HvisAfslut Sub

VBA If, ElseIf, Else i Access VBA

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

Du kan bruge en If -sætning til at kontrollere, om der er poster i et Recordset.

wave wave wave wave wave