I Excel VBA, IF Then Else -satsen kan du leta efter ett tillstånd och utföra en åtgärd i enlighet därmed.
Detta är oerhört värdefullt i många situationer som vi kommer att se i exemplen senare i denna handledning.
För att ge dig ett enkelt exempel, anta att du har en lista med betyg i Excel och du vill markera alla de elever som har fått ett A. Om jag ber dig att göra detta manuellt, kommer du att kontrollera varje elevs betyg och om det är ett A, du kommer att markera det, och om det inte är det, så lämnar du det som det är.
Samma logik kan byggas i VBA med Om då annars uttalande också (och naturligtvis göra mycket mer än att bara markera betyg).
I den här självstudien kommer jag att visa dig olika sätt där konstruktionen 'If Then Else' kan användas i Excel VBA och några praktiska exempel i praktiken.
Men innan jag går in på detaljerna, låt mig ge dig syntaxen för 'IF Then Else' -uttalandet.
Om du är intresserad av att lära dig VBA på det enkla sättet, kolla in min Online Excel VBA -utbildning.
Syntax - IF Then Else
Nedan är den generiska syntaxen för If Then Else -konstruktion i VBA
IF -tillstånd Då true_code [Else false_code]
Eller
IF -tillstånd Då true_code Annat false_code Avsluta IF
Observera att den andra delen av detta uttalande är valfri.
Om du nu undrar vad som är skillnaden mellan de två syntaxerna, låt mig förtydliga.
Den första syntaxen är en enkel enradig IF THEN ELSE-sats där du inte behöver använda END IF-satsen.
I den andra syntaxen finns emellertid true_code -delen på den andra raden. Detta är användbart när koden som du behöver köra om IF -villkoret är sant är lång och består av flera rader.
När du delar IF -satsen i flera rader måste du berätta för VBA var IF Then -konstruktionen slutar.
Därför måste du använda End IF -satsen.
Om du inte använder End IF vid behov visar VBA ett fel - "Blockera IF utan SLUTA IF"
Exempel på användning av IF Then -uttalande i VBA
För att ge dig en uppfattning om hur IF-THEN-påståendet fungerar i VBA, låt mig börja med några grundläggande exempel (några praktiska och mer användbara exempel behandlas senare i denna handledning).
Antag att du har en elevs poäng i cell A1 och du vill kontrollera om studenten klarade tentamen eller inte (godkänt tröskelvärde är 35).
Då kan du använda följande kod:
Sub CheckScore () If Range ("A1"). Value> = 35 Sedan avslutar MsgBox "Pass" Sub Sub
Ovanstående kod har en enda rad IF -sats som kontrollerar värdet i cell A1.
Om det är mer än 35, visar det meddelandet - "Pass".
Om det är mindre än 35 händer ingenting.
Men vad händer om du vill visa ett meddelande i båda fallen, oavsett om en student klarade eller missade tentamen.
Koden nedan skulle göra detta:
Sub CheckScore () Om intervall ("A1"). Värde> = 35 Då "MsgBox" Godkänn "Annat MsgBox" Misslyckas "Avsluta Om Avsluta Sub
Ovanstående kod använder IF samt ELSE -satsen för att utföra två olika villkor. När poängen är mer än (eller lika med) 35 är IF -villkoret sant och koden precis nedanför körs (allt före Else -satsen).
Men när IF -villkoret är FALSKT hoppar koden till Else -delen och kör kodblocket i den.
Observera att när vi använder en enda rad med IF Then -uttalande behöver vi inte använda End IF. Men när vi delar upp det i mer än en rad måste vi använda End If -satsen.
Nested IF Then (Multiple IF Then -uttalanden)
Hittills har vi använt ett enda IF Then -uttalande.
Om du har flera villkor att kontrollera kan du använda:
- Flera IF -förhållanden
- If Then Else uttalande
- OM Då ElseIf Else konstruera
Låt mig visa dig hur dessa skiljer sig åt och hur du använder detta i Excel VBA.
Flera IF -uttalanden
Låt oss ta samma exempel på att använda en elevs poäng.
Om eleven får mindre än 35 är meddelandet att visa 'Misslyckat', om poängen är mer än eller lika med 35 är meddelandet att visa 'Godkänt'.
Vi kan använda koden nedan för att få detta gjort:
Sub CheckScore () If Range ("A1"). Value = 35 Sedan avslutar MsgBox "Pass" Sub Sub
Du kan använda flera IF Then -uttalande som visas ovan. Även om detta fungerar är det inte ett exempel på bra kodning (eftersom du kommer att se alternativen nedan).
Om du bestämmer dig för att använda detta, kom ihåg att dessa uttalanden antingen ska vara oberoende eller utesluta varandra. Det viktiga att veta här är att i ovanstående konstruktion utvärderas alla IF -satser och de där villkoret är sant, koden körs.
Så även om det första IF -påståendet är korrekt, skulle det andra fortfarande utvärderas.
OM då annat uttalande
Anta att den här gången, i stället för att bara visa meddelandet Godkänd/misslyckad, har vi ytterligare ett villkor.
Om eleven får mindre än 35 är meddelandet som ska visas 'Misslyckat', om poängen är mer än eller lika med 35 är meddelandet som ska visas 'Godkänt' och om poängen är mer än 80, meddelandet som ska visas är 'Pass, with Distinction'.
Vi kan använda koden nedan för att få detta gjort:
Sub CheckScore () Om intervall ("A1"). Värde <35 Då "misslyckas" MsgBox "Annat om intervall (" A1 "). Sub
I koden ovan har vi använt flera IF -uttalanden (kapslade IF Then) med hjälp av Else.
Så det finns en "IF Then Else" -konstruktion inom en "IF Then Else" -konstruktion. Denna typ av häckning låter dig söka efter flera villkor och köra det relevanta kodblocket.
OM Då ElseIf Else Statement
Ovanstående kod (som vi såg i föregående avsnitt) kan optimeras ytterligare med hjälp av ElseIf -satsen.
Här är vad vi försöker göra - Om eleven får mindre än 35 är meddelandet att visa 'Misslyckat', om poängen är mer än eller lika med 35 är meddelandet som ska visas 'Godkänt' och om poängen är mer än 80, meddelandet som ska visas är "Godkänd, med utmärkelse".
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
Ovanstående kod använder ElseIf, vilket gör att vi kan behålla alla villkor inom ett enda IF Then -uttalande.
Använda AND och OR i IF Then Else
Hittills i denna handledning har vi bara kontrollerat ett enda tillstånd åt gången.
Men när du har flera beroende villkor kan du använda AND- eller OR -satsen med IF -villkoren.
Nedan finns syntaxen för att använda AND/OR -villkoret med IF Then -satsen.
IF Condition1 AND Condition2 Then true_code Else false_code End IF
I koden ovan körs true_code endast när både villkor1 och villkor2 är uppfyllda. Även om ett av villkoren är falskt kommer det att köra false_code.
Med ELLER, även om ett av villkoren är sanna, kommer det att köra true_code. Först när alla villkor är falska kör den false_code.
Låt oss nu se hur AND och OR -uttalandet fungerar med IF Then Else -konstruktionen.
Antag att du har poängen för två ämnen istället för ett, och du vill kontrollera följande villkor:
- Misslyckas - När poängen är mindre än 35 i något av ämnena.
- Passera - När poängen är mer än eller lika med 35, men mindre än 80 i båda ämnena.
- Godkänd, med utmärkelse - När poängen är mer än 35 i båda ämnena och är mer än eller lika med 80 i ett eller båda ämnena.
Här är koden som gör detta:
Sub CheckScore () If Range ("A1"). Value <35 or Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 And Range ("B1"). Värde <80 Sedan MsgBox "Pass" Else MsgBox "Pass, med utmärkelse" End If End Sub
Ovanstående kod använder både OR och AND -satser.
Du kan också skriva samma kod med en liten ändring (med hjälp av OR istället för AND).
Sub CheckScore () If Range ("A1"). Value <35 or Range ("B1"). Value 80 or Range ("B1"). Value> 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Om End Sub
Båda ovanstående VBA -koder ger dig samma resultat. Personligen föredrar jag den första eftersom den har ett logiskt flöde att kontrollera poängen (men det är bara jag).
Använda inte lika med i Om då
I alla exemplen ovan har vi använt villkoren som kontrollerar om ett värde är lika med ett visst värde eller inte.
Du kan också använda liknande koder när du kontrollerar när värdet inte är lika med ett angivet värde i VBA -koden. Inte lika med representerat av Excel VBA.
För att se ett praktiskt exempel på användning, ta en titt på Exempel 1 nedan.
Använda If Then Else med loopar i VBA
Hittills har vi gått igenom några exempel som är bra att förstå hur 'IF-THEN'-uttalandena fungerar i VBA, men inte är användbara i den praktiska världen.
Om jag behöver betygsätta elever kan jag enkelt göra det med hjälp av Excel -funktioner.
Så låt oss ta en titt på några användbara och praktiska exempel som kan hjälpa dig att automatisera vissa saker och bli mer effektiva.
Exempel 1 - Spara och stäng alla arbetsböcker utom den aktiva arbetsboken
Om du har många arbetsböcker öppna och du snabbt vill stänga alla, utom den aktiva arbetsboken, kan du använda koden nedan,
Sub SaveCloseAllWorkbooks () Dim wb som arbetsbok för varje wb i arbetsböcker Vid fel fortsätt nästa om wb.Name ActiveWorkbook.Name Sedan wb.Save wb.Close End If Next wb End Sub
Ovanstående kod skulle spara och stänga alla arbetsböcker (utom den aktiva).
Den använder For Next -slingan för att gå igenom samlingen av alla öppna arbetsböcker och kontrollerar namnet med IF -villkoret.
Om namnet inte är detsamma som det i den aktiva arbetsboken sparar och stänger det det.
Om det finns en VBA -kod i någon av arbetsböckerna och du inte har sparat den som .xls eller .xlsm kommer du att se en varning (eftersom vba -koder går förlorade när du sparar den i .xlsx -format).
Exempel 2 - Markera celler med negativa värden
Antag att du har en kolumn full av siffror och du snabbt vill markera alla celler med negativa värden i rött, du kan göra det med hjälp av koden nedan.
Sub HighlightNegativeCells () Dim Cll som intervall för varje Cll i urval Om Cll.Value <0 Sedan Cll.Interior.Color = vbRed Cll.Font.Color = vbWite End If Next Cll End Sub
Koden ovan använder slingan För varje och kontrollerar varje cell i det val du har gjort. Om cellen har ett värde som är negativt markeras det med rött med vit teckensnittsfärg.
Exempel 3 - Dölj allt kalkylblad utom det aktuella kalkylbladet
Om du snabbt vill dölja alla kalkylblad utom det aktiva kan du använda koden nedan:
Sub HideAllExceptActiveSheet () Dim ws Som arbetsblad för varje ws i ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Sedan ws.Visible = xlSheetHidden Nästa ws Avsluta Sub
Koden ovan använder slingan För varje för att gå igenom en samling kalkylblad. Det kontrollerar namnet på varje kalkylblad och döljer det om det inte är det aktiva kalkylbladet.
Exempel 4 - Extrahera den numeriska delen från en alfanumerisk sträng
Om du har alfanumeriska strängar i celler och du vill extrahera den numeriska delen från den kan du göra det med följande kod:
Funktion 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 = Resultat slutfunktion
Denna kod skapar en anpassad funktion i Excel som kan användas i kalkylbladet (precis som en vanlig funktion).
Var ska man lägga VBA -koden?
Undrar du vart VBA -koden går i din Excel -arbetsbok?
Excel har en VBA -backend som kallas VB -editor. Du måste kopiera och klistra in koden i fönstret VB Editor -modulkod.
Här är stegen för att göra detta:
- Gå till fliken Utvecklare.
- Klicka på Visual Basic -alternativet. Detta öppnar VB -redigeraren i backend.
- I fönstret Projektutforskare i VB-redigeraren högerklickar du på valfritt objekt för arbetsboken där du vill infoga koden. Om du inte ser Project Explorer går du till fliken View och klickar på Project Explorer.
- Gå till Infoga och klicka på Modul. Detta kommer att infoga ett modulobjekt för din arbetsbok.
- Kopiera och klistra in koden i modulfönstret.