If Then Else Statement i Excel VBA (forklart med eksempler)

I Excel VBA, IF Then Else -setning kan du se etter en tilstand og utføre en handling deretter.

Dette er ekstremt verdifullt i mange situasjoner, som vi vil se i eksemplene senere i denne opplæringen.

For å gi deg et enkelt eksempel, anta at du har en liste over karakterer i Excel, og du vil markere alle de elevene som har fått et A. Nå, hvis jeg ber deg om å gjøre dette manuelt, vil du sjekke hver elevs karakter og om det er et A, vil du markere det, og hvis det ikke er det, så lar du det være som det er.

Den samme logikken kan bygges i VBA ved hjelp av Hvis da ellers uttalelse også (og selvfølgelig gjøre mye mer enn bare å markere karakterer).

I denne opplæringen vil jeg vise deg forskjellige måter konstruksjonen "If Then Else" kan brukes i Excel VBA, og noen praktiske eksempler i bruk.

Men før jeg går inn på detaljene, la meg gi deg syntaksen til setningen ‘IF Then Else’.

Hvis du er interessert i å lære VBA på den enkle måten, sjekk min Online Excel VBA -opplæring.

Syntaks - IF Then Else

Nedenfor er den generiske syntaksen til If Then Else -konstruksjonen i VBA

IF -tilstand Da true_code [Else false_code]

Eller

IF -tilstand Da true_code Else false_code End IF

Vær oppmerksom på at den andre delen av denne erklæringen er valgfri.

Hvis du lurer på hva som er forskjellen mellom de to syntakser, la meg klargjøre.

Den første syntaksen er en enkel en-linje IF THEN ELSE-setning der du ikke trenger å bruke END IF IF-setningen.

I den andre syntaksen er delen true_code imidlertid på den andre linjen. Dette er nyttig når koden du trenger å kjøre i tilfelle IF -tilstanden er sann er lang og består av flere linjer.

Når du deler IF -setningen i flere linjer, må du fortelle VBA hvor IF Then -konstruksjonen slutter.

Derfor må du bruke End IF -setningen.

Hvis du ikke bruker End IF når det er nødvendig, viser VBA deg en feil - "Block IF without END IF"

Eksempler på bruk av IF Then -erklæring i VBA

For å gi deg en ide om hvordan IF-THEN-setningen fungerer i VBA, la meg starte med noen grunnleggende eksempler (noen praktiske og mer nyttige eksempler dekkes senere i denne opplæringen).

Anta at du har en elevs poengsum i celle A1, og du vil kontrollere om studenten besto eksamen eller ikke (bestått terskel er 35).

Deretter kan du bruke følgende kode:

Sub CheckScore () If Range ("A1"). Value> = 35 Then MsgBox "Pass" End Sub

Koden ovenfor har en enkelt linje med IF -setning som kontrollerer verdien i celle A1.

Hvis det er mer enn 35, viser det meldingen - "Pass".

Hvis det er mindre enn 35, skjer det ingenting.

Men hva om du vil vise en melding i begge tilfellene, enten en student besto eller ikke bestod eksamen.

Koden nedenfor vil gjøre dette:

Sub CheckScore () If Range ("A1"). Value> = 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

Koden ovenfor bruker IF så vel som ELSE -setningen for å utføre to forskjellige forhold. Når poengsummen er mer enn (eller lik) 35, er IF -betingelsen sann, og koden rett under den blir utført (alt før Else -setningen).

Men når IF -tilstanden er FALSK, hopper koden til Else -delen og kjører kodeblokken i den.

Vær oppmerksom på at når vi bruker en enkelt linje med IF Then -setning, trenger vi ikke å bruke End IF. Men når vi deler den i mer enn én linje, må vi bruke End If -setningen.

Nested IF Then (Multiple IF Then statements)

Så langt har vi brukt en enkelt IF Then -setning.

Hvis du har flere betingelser å kontrollere, kan du bruke:

  • Flere IF -forhold
  • If Then Else uttalelse
  • IF Then ElseIf Else construct

La meg vise deg hvordan disse er forskjellige og hvordan du bruker dette i Excel VBA.

Flere HVIS -uttalelser

La oss ta det samme eksemplet på å bruke en elevs poengsum.

Hvis eleven scorer mindre enn 35, er meldingen som skal vises 'Ikke bestått', hvis poengsummen er mer enn eller lik 35, er meldingen som skal vises 'Godkjent'.

Vi kan bruke koden nedenfor for å få dette gjort:

Sub CheckScore () If Range ("A1"). Value = 35 Then MsgBox "Pass" End Sub

Du kan bruke flere IF Then -setninger som vist ovenfor. Selv om dette fungerer, er det ikke et eksempel på god koding (som du vil se alternativene nedenfor).

I tilfelle du bestemmer deg for å bruke dette, husk at disse utsagnene enten skal være uavhengige eller gjensidig utelukkende. Det viktige å vite her er at i ovennevnte konstruksjon evalueres alle IF -setningene og de der betingelsen er sann, koden utføres.

Så selv om den første IF -setningen er korrekt, vil den andre fortsatt bli evaluert.

HVIS deretter en annen uttalelse

Anta at denne gangen, i stedet for bare å vise meldingen Pass/Fail, har vi en betingelse til.

Hvis eleven scorer mindre enn 35, er meldingen som skal vises 'Mislykket', hvis poengsummen er mer enn eller lik 35, er meldingen som skal vises 'Godkjent', og hvis poengsummen er mer enn 80, meldingen som skal vises er 'Pass, with Distinction'.

Vi kan bruke koden nedenfor for å få dette gjort:

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" Else If Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Under

I koden ovenfor har vi brukt flere IF -setninger (nestet IF Then) ved hjelp av Else.

Så det er en "IF Then Else" -konstruksjon i en "IF Then Else" -konstruksjon. Denne typen hekker lar deg se etter flere forhold og kjøre den relevante blokkblokken.

IF Then ElseIf Else Statement

Koden ovenfor (som vi så i forrige seksjon) kan optimaliseres ytterligere ved å bruke ElseIf -setningen.

Her er det vi prøver å gjøre - Hvis eleven scorer mindre enn 35, er meldingen som skal vises 'Mislykket', hvis poengsummen er mer enn eller lik 35, er meldingen som skal vises 'Godkjent', og hvis poengsummen er mer enn 80, meldingen som skal vises er 'Bestått, med utmerkelse'.

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

Koden ovenfor bruker ElseIf, som lar oss beholde alle betingelsene i en enkelt IF Then -setning.

Bruk AND og OR i IF Then Else

Så langt i denne opplæringen har vi bare sjekket for en enkelt tilstand om gangen.

Men når du har flere avhengige betingelser, kan du bruke AND- eller OR -setningen med IF -betingelsene.

Nedenfor er syntaksen for bruk av AND/OR -betingelse med IF Then -setningen.

IF Condition1 AND Condition2 Then true_code Else false_code End IF

I koden ovenfor, bare når både betingelse1 og betingelse2 er oppfylt, blir true_code utført. Selv om en av betingelsene er falske, vil den utføre false_code.

Med OR, selv om en av betingelsene er sanne, vil den utføre true_code. Bare når alle betingelsene er falske, utfører den false_code.

La oss nå se hvordan AND og OR -setningen fungerer med IF Then Else -konstruksjonen.

Anta at du har poengsummen for to emner i stedet for ett, og du vil se etter følgende forhold:

  • Mislykkes - Når poengsummen er mindre enn 35 i noen av fagene.
  • Sende - Når poengsummen er mer enn eller lik 35, men mindre enn 80 i begge fagene.
  • Pass, med utmerkelse - Når poengsummen er mer enn 35 i begge fagene og er mer enn eller lik 80 i ett eller begge fagene.

Her er koden som gjør dette:

Sub CheckScore () If Range ("A1"). Value <35 or Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 And Range ("B1"). Verdi <80 Deretter MsgBox "Pass" Ellers MsgBox "Pass, med utmerkelse" End If End Sub

Koden ovenfor bruker både OR og AND setninger.

Du kan også skrive den samme koden med en liten endring (ved å bruke OR i stedet for AND).

Sub CheckScore () If Range ("A1"). Verdi <35 Eller Range ("B1"). Value 80 Eller Range ("B1"). Verdi> 80 Deretter MsgBox "Pass, med utmerkelse" Else MsgBox "Pass" End Hvis End Sub

Begge de ovennevnte VBA -kodene vil gi deg det samme resultatet. Personlig foretrekker jeg den første siden den har en logisk flyt for å sjekke poengsummene (men det er bare meg).

Bruker Ikke lik til i Hvis da

I alle eksemplene ovenfor har vi brukt betingelsene som kontrollerer om en verdi som er lik en spesifisert verdi eller ikke.

Du kan også bruke lignende koder når du sjekker når verdien ikke er lik en spesifisert verdi i VBA -koden. Ikke lik representert av Excel VBA.

For å se et praktisk eksempel på bruk, kan du se på eksempel 1 nedenfor.

Bruke If Then Else med Loops i VBA

Så langt har vi gått gjennom noen eksempler som er gode å forstå hvordan 'HVIS-DA' -uttalelsene fungerer i VBA, men ikke er nyttige i den praktiske verden.

Hvis jeg trenger å rangere studenter, kan jeg enkelt gjøre det ved hjelp av Excel -funksjoner.

Så la oss se på noen nyttige og praktiske eksempler som kan hjelpe deg med å automatisere noen ting og bli mer effektive.

Eksempel 1 - Lagre og lukk alle arbeidsbøker bortsett fra den aktive arbeidsboken

Hvis du har mange arbeidsbøker åpne og du raskt vil lukke alle, bortsett fra den aktive arbeidsboken, kan du bruke koden nedenfor,

Sub SaveCloseAllWorkbooks () Dim wb som arbeidsbok for hver wb i arbeidsbøker Ved feil fortsett neste hvis wb.Name ActiveWorkbook.Name Deretter wb.Save wb.Close End If Next wb End Sub

Koden ovenfor vil lagre og lukke alle arbeidsbøkene (unntatt den aktive).

Den bruker For Next -løkken til å gå gjennom samlingen av alle de åpne arbeidsbøkene og sjekker navnet ved hjelp av IF -tilstanden.

Hvis navnet ikke er det samme som navnet på den aktive arbeidsboken, lagrer og lukker den den.

Hvis det er en VBA -kode i noen av arbeidsbøkene og du ikke har lagret den som .xls eller .xlsm, vil du se en advarsel (ettersom vba -kodene går tapt når du lagrer den i .xlsx -format).

Eksempel 2 - Fremhev celler med negative verdier

Anta at du har en kolonne full av tall og du raskt vil markere alle cellene med negative verdier i rødt, du kan gjøre det ved å bruke koden nedenfor.

Sub HighlightNegativeCells () Dim Cll som område for hver Cll i utvalg Hvis Cll.Value <0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWite End If Next Cll End Sub

Koden ovenfor bruker sløyfen For hver og sjekker hver celle i valget du har gjort. Hvis cellen har en verdi som er negativ, er den markert med rødt med hvit skriftfarge.

Eksempel 3 - Skjul alt regnearket bortsett fra det gjeldende regnearket

Hvis du raskt vil skjule alle regnearkene bortsett fra det aktive, kan du bruke koden nedenfor:

Sub HideAllExceptActiveSheet () Dim ws As Worksheet For each ws In ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Koden ovenfor bruker sløyfen For hver for å gå gjennom en samling regneark. Den sjekker navnet på hvert regneark og skjuler det hvis det ikke er det aktive regnearket.

Eksempel 4 - Trekk ut den numeriske delen fra en alfanumerisk streng

Hvis du har alfanumeriske strenger i celler og du vil trekke ut den numeriske delen fra den, kan du gjøre det ved å bruke koden nedenfor:

Funksjon GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Resultatsluttfunksjon

Denne koden vil opprette en egendefinert funksjon i Excel som kan brukes i regnearket (akkurat som en vanlig funksjon).

Hvor legger jeg VBA -koden?

Lurer du på hvor VBA -koden går i Excel -arbeidsboken din?

Excel har en VBA -backend kalt VB -redaktøren. Du må kopiere og lime inn koden i VB Editor -modulvinduet.

Her er trinnene for å gjøre dette:

  1. Gå til kategorien Utvikler.
  2. Klikk på Visual Basic -alternativet. Dette vil åpne VB -redaktøren i backend.
  3. I Project Explorer-ruten i VB Editor, høyreklikker du på et hvilket som helst objekt for arbeidsboken der du vil sette inn koden. Hvis du ikke ser Project Explorer, går du til kategorien View og klikker på Project Explorer.
  4. Gå til Sett inn og klikk på Modul. Dette vil sette inn et modulobjekt for arbeidsboken din.
  5. Kopier og lim inn koden i modulvinduet.
wave wave wave wave wave