I Excel VBA, IF Then Else -sætning kan du kontrollere for en tilstand og udføre en handling i overensstemmelse hermed.
Dette er ekstremt værdifuldt i mange situationer, som vi vil se i eksemplerne senere i denne vejledning.
For at give dig et enkelt eksempel, antag at du har en liste over karakterer i Excel, og du vil fremhæve alle de elever, der har fået et A. Nu, hvis jeg beder dig om at gøre dette manuelt, vil du kontrollere hver elevs karakter, og hvis det er et A, du vil fremhæve det, og hvis det ikke er det, så lader du det være som det er.
Den samme logik kan bygges i VBA ved hjælp af Hvis så ellers udsagn også (og selvfølgelig gøre meget mere end bare at fremhæve karakterer).
I denne vejledning viser jeg dig forskellige måder, 'If Then Else' -konstruktionen kan bruges i Excel VBA, og nogle praktiske eksempler i aktion.
Men før jeg går ind på detaljerne, lad mig give dig syntaksen for 'IF Then Else' -udsagnet.
Hvis du er interesseret i at lære VBA på den nemme måde, så tjek min Online Excel VBA -træning.
Syntaks - HVIS derefter
Nedenfor er den generiske syntaks for If Then Else konstruere i VBA
IF -tilstand Så true_code [Else false_code]
Eller
IF -tilstand Så true_code Ellers false_code Afslut IF
Bemærk, at den anden del af denne erklæring er valgfri.
Hvis du nu undrer dig over, hvad der er forskellen mellem de to syntakser, lad mig præcisere.
Den første syntaks er en simpel en-linje HVIS SÅ ELSER sætning, hvor du ikke behøver at bruge Slut HVIS-sætningen.
I den anden syntaks er delen true_code imidlertid i den anden linje. Dette er nyttigt, når den kode, du skal køre, hvis IF -betingelsen er sand, er lang og består af flere linjer.
Når du opdeler IF -sætningen i flere linjer, skal du fortælle VBA, hvor IF Then -konstruktionen ender.
Derfor skal du bruge End IF -sætningen.
Hvis du ikke bruger End IF, når det er påkrævet, viser VBA dig en fejl - "Block IF without END IF"
Eksempler på brug af IF Then -erklæring i VBA
For at give dig en idé om, hvordan IF-THEN-sætningen fungerer i VBA, lad mig starte med nogle grundlæggende eksempler (nogle praktiske og mere nyttige eksempler er dækket senere i denne vejledning).
Antag, at du har en elevs score i celle A1, og du vil kontrollere, om eleven har bestået eksamen eller ej (godkendelsesgrænsen er 35).
Derefter kan du bruge følgende kode:
Sub CheckScore () Hvis område ("A1"). Værdi> = 35 Så afslutter MsgBox "Pass" Sub Sub
Ovenstående kode har en enkelt linje IF -sætning, der kontrollerer værdien i celle A1.
Hvis det er mere end 35, viser det budskabet - "Pass".
Hvis det er mindre end 35, sker der ikke noget.
Men hvad nu hvis du vil vise en besked i begge tilfælde, uanset om en elev bestod eller ikke bestod eksamen.
Nedenstående kode ville gøre dette:
Sub CheckScore () Hvis område ("A1"). Værdi> = 35 Så "MsgBox" Består "Ellers MsgBox" Mislykkes "Slut hvis slut Sub
Ovenstående kode bruger IF samt ELSE -sætningen til at udføre to forskellige betingelser. Når scoren er mere end (eller lig med) 35, er IF -betingelsen sand, og koden lige nedenfor bliver udført (alt før Else -sætningen).
Men når IF -betingelsen er FALSK, hopper koden til Else -delen og udfører kodeblokken i den.
Bemærk, at når vi bruger en enkelt linje med IF Then -erklæring, behøver vi ikke bruge End IF. Men når vi opdeler det i mere end en linje, skal vi bruge sætningen End If.
Indlejret HVIS derefter (Flere HVIS -derefter -udsagn)
Indtil videre har vi brugt en enkelt IF Then -sætning.
Hvis du har flere betingelser at kontrollere, kan du bruge:
- Flere IF -betingelser
- Hvis Så Else erklæring
- HVIS derefter ElseIf Else konstruere
Lad mig vise dig, hvordan disse adskiller sig, og hvordan du bruger dette i Excel VBA.
Flere HVIS derefter erklæringer
Lad os tage det samme eksempel på at bruge en elevs score.
Hvis eleven scorer mindre end 35, er meddelelsen, der skal vises, 'Ikke bestået', hvis scoren er mere end eller lig med 35, er meddelelsen, der skal vises, 'Godkendt'.
Vi kan bruge nedenstående kode for at få dette gjort:
Sub CheckScore () Hvis område ("A1"). Værdi = 35 Herefter slutter MsgBox "Pass" Sub Sub
Du kan bruge flere IF Then -udsagn som vist ovenfor. Selvom dette virker, er det ikke et eksempel på god kodning (som du vil se alternativerne herunder).
Hvis du beslutter dig for at bruge dette, skal du huske, at disse udsagn enten skal være uafhængige eller gensidigt udelukkende. Det vigtige at vide her er, at i ovenstående konstruktion evalueres alle IF -sætningerne, og dem, hvor betingelsen er sand, koden udføres.
Så selvom den første IF -sætning er korrekt, ville den anden stadig blive evalueret.
HVIS derefter anden erklæring
Antag, at denne gang, i stedet for bare at vise meddelelsen Pass/Fail, har vi en betingelse mere.
Hvis eleven scorer mindre end 35, er meddelelsen, der skal vises, 'Mislykket', hvis scoren er mere end eller lig med 35, er meddelelsen, der skal vises, 'Godkendt', og hvis scoren er mere end 80, skal meddelelsen vises er 'Pass, with Distinction'.
Vi kan bruge nedenstående kode for at få dette gjort:
Sub CheckScore () Hvis område ("A1"). Værdi <35 Så mislykkes MsgBox "Andet hvis område (" A1 "). Værdi <80 Derefter MsgBox" Godkend "andet MsgBox" Bestået, med udmærkelse "Slut hvis slut hvis ende Sub
I ovenstående kode har vi brugt flere IF -sætninger (indlejret IF Then) ved hjælp af Else.
Så der er en 'IF Then Else' konstruktion inden for en 'IF Then Else' konstruktion. Denne type indlejring giver dig mulighed for at kontrollere, om der er flere forhold og køre den relevante kodeblok.
HVIS derefter ElseIf Else Statement
Ovenstående kode (som vi så i det foregående afsnit) kan optimeres yderligere ved hjælp af ElseIf -sætningen.
Her er, hvad vi prøver at gøre - Hvis eleven scorer mindre end 35, er meddelelsen, der skal vises, 'Ikke bestået', hvis scoren er mere end eller lig med 35, er meddelelsen, der skal vises, 'Godkendt', og hvis score er mere end 80, meddelelsen, der skal vises, er 'Bestået, med udmærkelse'.
Sub CheckScore () Hvis område ("A1"). Værdi <35 Så "MsgBox" mislykkes "ElseIf område (" A1 "). Værdi <80 Derefter MsgBox" Godkend "Ellers MsgBox" Godkend, med udmærkelse "End If End Sub
Ovenstående kode bruger ElseIf, som giver os mulighed for at beholde alle betingelserne inden for en enkelt IF Then -sætning.
Brug af AND og OR i IF Then Else
Hidtil i denne vejledning har vi kun tjekket for en enkelt tilstand ad gangen.
Men når du har flere afhængige betingelser, kan du bruge AND- eller OR -sætningen med IF -betingelserne.
Nedenfor er syntaksen for brug af AND/OR -betingelse med IF Then -sætningen.
IF Condition1 AND Condition2 Then true_code Else false_code End IF
I ovennævnte kode udføres true_code kun når både betingelse1 og betingelse2 er opfyldt. Selvom en af betingelserne er falsk, vil den udføre false_code.
Med ELLER, selvom en af betingelserne er sande, udfører den true_code. Kun når alle betingelserne er falske, udfører den false_code.
Lad os nu se, hvordan AND og OR -sætning fungerer med IF Then Else -konstruktionen.
Antag, at du har karaktererne for to emner i stedet for et, og du vil kontrollere følgende betingelser:
- Svigte - Når scoren er mindre end 35 i et af emnerne.
- Passere - Når scoren er mere end eller lig med 35, men mindre end 80 i begge fag.
- Bestået, med udmærkelse - Når scoren er mere end 35 i begge fag og er mere end eller lig med 80 i et eller begge emner.
Her er koden, der gør dette:
Sub CheckScore () Hvis område ("A1"). Værdi <35 Eller område ("B1"). Værdi <35 Så MsgBox "Fejl" ElseIf område ("A1"). Værdi <80 og område ("B1"). Værdi <80 Derefter MsgBox "Pass" Ellers MsgBox "Pass, med udmærkelse" End If End Sub
Ovenstående kode bruger både OR og AND -sætninger.
Du kan også skrive den samme kode med en lille ændring (ved hjælp af OR i stedet for AND).
Sub CheckScore () Hvis område ("A1"). Værdi <35 Eller område ("B1"). Værdi 80 eller område ("B1"). Værdi> 80 Derefter slutter MsgBox "med forskel" Ellers MsgBox "Pass" slut Hvis End Sub
Begge ovenstående VBA -koder giver dig det samme resultat. Personligt foretrækker jeg den første, da den har en logisk strøm af kontrol af scores (men det er bare mig).
Brug af Ikke lig med i Hvis så
I alle eksemplerne ovenfor har vi brugt betingelserne for at kontrollere, om en værdi svarer til en bestemt værdi eller ej.
Du kan også bruge lignende koder, når du kontrollerer, om værdien ikke er lig med en bestemt værdi i VBA -koden. Ikke lig med repræsenteret af Excel VBA.
For at se et praktisk eksempel på brug, skal du se på eksempel 1 herunder.
Brug af If Then Else med Loops i VBA
Indtil videre har vi gennemgået nogle eksempler, der er gode til at forstå, hvordan 'HVIS-SÅ'-udsagnene fungerer i VBA, men ikke er nyttige i den praktiske verden.
Hvis jeg har brug for at bedømme elever, kan jeg nemt gøre det ved hjælp af Excel -funktioner.
Så lad os se på nogle nyttige og praktiske eksempler, der kan hjælpe dig med at automatisere nogle ting og være mere effektive.
Eksempel 1 - Gem og luk alle projektmapper undtagen den aktive projektmappe
Hvis du har mange åbne projektmapper, og du hurtigt vil lukke alle, undtagen den aktive projektmappe, kan du bruge nedenstående kode,
Sub SaveCloseAllWorkbooks () Dim wb som projektmappe for hver wb i projektmapper Ved fejl genoptages næste If wb.Name ActiveWorkbook.Name Herefter wb.Save wb.Close End If Next wb End Sub
Ovenstående kode vil gemme og lukke alle projektmapper (undtagen den aktive).
Den bruger For Next -løkken til at gå igennem samlingen af alle de åbne projektmapper og kontrollerer navnet ved hjælp af IF -betingelsen.
Hvis navnet ikke er det samme som navnet på den aktive projektmappe, gemmes og lukkes det.
Hvis der er en VBA -kode i nogen af projektmapperne, og du ikke har gemt den som .xls eller .xlsm, vil du se en advarsel (da vba -koderne går tabt, når du gemmer den i .xlsx -format).
Eksempel 2 - Fremhæv celler med negative værdier
Antag, at du har en kolonne fuld af tal, og du hurtigt vil fremhæve alle cellerne med negative værdier i rødt, du kan gøre det ved hjælp af nedenstående kode.
Sub HighlightNegativeCells () Dim Cll som område for hver Cll i markering Hvis Cll.Value <0 Herefter Cll.Interior.Color = vbRed Cll.Font.Color = vbWite End If Next Cll End Sub
Ovenstående kode bruger For hver loop og kontrollerer hver celle i det valg, du har foretaget. Hvis cellen har en værdi, der er negativ, fremhæves den med rødt med hvid skriftfarve.
Eksempel 3 - Skjul alt regnearket undtagen det aktuelle regneark
Hvis du hurtigt vil skjule alle regneark undtagen det aktive, kan du bruge nedenstående kode:
Sub HideAllExceptActiveSheet () Dim ws Som regneark for hver ws i ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Herefter ws.Visible = xlSheetHidden Næste ws End Sub
Ovenstående kode bruger For Every loop til at gennemgå en samling regneark. Det kontrollerer navnet på hvert regneark og skjuler det, hvis det ikke er det aktive regneark.
Eksempel 4 - Udtræk den numeriske del fra en alfanumerisk streng
Hvis du har alfanumeriske strenge i celler, og du vil udtrække den numeriske del fra den, kan du gøre det ved hjælp af nedenstående kode:
Funktion GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Herefter Resultat = Resultat & Mid (CellRef, i, 1) Næste i GetNumeric = Resultatafslutningsfunktion
Denne kode opretter en brugerdefineret funktion i Excel, der kan bruges i regnearket (ligesom en almindelig funktion).
Hvor placeres VBA -koden?
Gad vide, hvor VBA -koden går i din Excel -projektmappe?
Excel har en VBA -backend kaldet VB -editoren. Du skal kopiere og indsætte koden i vinduet VB Editor -modulkode.
Her er trinene til at gøre dette:
- Gå til fanen Udvikler.
- Klik på indstillingen Visual Basic. Dette åbner VB -editoren i backend.
- Højreklik på et objekt til projektmappen, hvor du vil indsætte koden, i ruden Project Explorer i VB Editor. Hvis du ikke kan se Project Explorer, skal du gå til fanen View og klikke på Project Explorer.
- Gå til Indsæt og klik på Modul. Dette vil indsætte et modulobjekt til din projektmappe.
- Kopier og indsæt koden i modulvinduet.