VBA If, ElseIf, Else (Ultimate Guide to If -uttalanden)

VBA -uttalande

Om då

VBA Om uttalanden tillåter dig att testa om uttryck är SANT eller FALSKT, kör en annan kod baserat på resultaten.Låt oss titta på ett enkelt exempel:
1 If Range ("a2"). Värde> 0 Sedan Range ("b2"). Value = "Positive"
Detta testar om värdet i intervall A2 är större än 0. Om så är fallet, ställer intervall B2 lika med "Positivt"Obs: Vid testförhållanden använder vi =,>, <,, = jämförelseoperatorer. Vi kommer att diskutera dem mer i detalj senare i artikeln.Här är syntaxen för en enkel If-sats med en rad:
1 Om [test_expression] då [action]
För att göra det lättare att läsa kan du använda ett linjefortsättningstecken (understreck) för att expandera If -satserna till två rader (som vi gjorde på bilden ovan):
12 Om [test_expression] då _[handling]
12 If Range ("a2"). Värde> 0 Då _Område ("b2"). Värde = "Positivt"

Avsluta om

Ovanstående "single-line" if-sats fungerar bra när du testar ett villkor. Men när dina IF -uttalanden blir mer komplicerade med flera villkor måste du lägga till ett "Sluta om" i slutet av if -satsen:
123 If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"Avsluta om

Här är syntaxen:

123 Om [test_expression] då[handling]Avsluta om

Slutet If betyder slutet på if -satsen.

Låt oss nu lägga till ett ElseIF:

ElseIF - Flera villkor

ElseIf läggs till i en befintlig If -sats. Annars Om testar om ett villkor är uppfyllt ENDAST om de tidigare villkoren inte har uppfyllts.I föregående exempel testade vi om ett cellvärde är positivt. Nu kommer vi också att testa om cellvärdet är negativt med en ElseIf:
12345 If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"ElseIf Range ("a2"). Värde <0 SedanOmråde ("b2"). Värde = "Negativt"Avsluta om

Du kan använda flera ElseIfs för att testa för flera förhållanden:

1234567891011 Sub If_Multiple_Conditions ()If Range ("a2"). Value = "Cat" DåOmråde ("b2"). Värde = "Meow"ElseIf Range ("a2"). Value = "Dog" DåOmråde ("b2"). Värde = "Woof"ElseIf Range ("a2"). Value = "Duck" DåOmråde ("b2"). Värde = "Quack"Avsluta omAvsluta Sub

Nu lägger vi till en Annan:

Annan

De Annan kommer att köra om inga andra tidigare villkor har uppfyllts.

Vi avslutar vårt exempel med att använda ett annat för att indikera att om cellvärdet inte är positivt eller negativt måste det vara noll:

1234567 If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"ElseIf Range ("a2"). Värde <0 SedanOmråde ("b2"). Värde = "Negativt"AnnanOmråde ("b2"). Värde = "Noll"Avsluta om

Om annat

Den vanligaste typen av If-sats är en enkel If-Else:

1234567 Sub If_Else ()If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"AnnanOmråde ("b2"). Värde = "Ej positivt"Avsluta omAvsluta Sub

Kapslade IF: er

Du kan också "häcka" om uttalanden inuti varandra.

1234567891011 Sub Nested_Ifs ()If Range ("a2"). Värde> 0 SedanOmråde ("b2"). Värde = "Positivt"AnnanIf Range ("a2"). Värde <0 DåOmråde ("b2"). Värde = "Negativt"AnnanOmråde ("b2"). Värde = "Noll"Avsluta omAvsluta omAvsluta Sub

OM - Eller, Och, Xor, Inte

Därefter kommer vi att diskutera de logiska operatorerna: Eller, Och, Xor, Not.

Om Eller

De Eller operatör testar om minst ett villkor är uppfyllt.

Följande kod testar om värdet i intervall A2 är mindre än 5000 eller högre än 10 000:

123 If Range ("a2"). Värde 10000 DåOmråde ("b2"). Value = "Out of Range"Avsluta om

Du kan inkludera flera Ors på en rad:

123 Om intervall ("a2"). Värde 10000 eller intervall ("a2"). Värde = 9999 sedanOmråde ("b2"). Värde = "Out of Range"Avsluta om

Om du ska använda flera Ors, rekommenderas det att du använder ett linjetecken för att göra din kod lättare att läsa:

123456 If Range ("a2"). Värde <5000 Eller _Område ("a2"). Värde> 10000 Eller _Område ("a2"). Värde = 9999 SedanOmråde ("b2"). Value = "Out of Range"Avsluta om

Om Och

Med operatören And kan du testa om ALLA villkor är uppfyllda.

123 Om intervall ("a2"). Värde> = 5000 och intervall ("a2"). Värde <= 10000 sedanOmråde ("b2"). Värde = "Inom räckvidd"Avsluta om

Om Xor

Xor -operatören låter dig testa om exakt ett villkor är uppfyllt. Om nollvillkoren är uppfyllda kommer Xor att returnera FALSKT, om två eller flera villkor är uppfyllda kommer Xor också att returnera falskt.

Jag har sällan sett Xor användas i VBA -programmering.

Om inte

Operatorn Not används för att konvertera FALSE till TRUE eller TRUE to FALSE:

123 Sub IF_Not ()MsgBox Not (True)Avsluta Sub

Lägg märke till att operatorn Not kräver att parentes kring uttrycket växlar.

Operatören Not kan också tillämpas på If -uttalanden:

123 Om inte (intervall ("a2"). Värde> = 5000 och intervall ("a2"). Värde <= 10000) sedanOmråde ("b2"). Value = "Out of Range"Avsluta om

Om jämförelser

När du gör jämförelser använder du vanligtvis en av jämförelseoperatörerna:

Jämförelseoperatör Förklaring
= Lika med
Inte lika med
> Större än
>= Större än eller lika med
< Mindre än
<= Mindre än eller lika med

Men du kan också använda valfritt uttryck eller funktion som resulterar i SANT eller FALSKT

If - Boolsk funktion

När du bygger uttryck för If -uttalanden kan du också använda valfri funktion som genererar SANT eller Falskt. VBA har några av dessa funktioner:

Fungera Beskrivning
IsDate Returnerar SANT om uttrycket är ett giltigt datum
Är tom Sök efter tomma celler eller odefinierade variabler
IsError Kontrollera om det finns felvärden
Är inget Sök efter NULL -värde
Är Numerisk Sök efter numeriskt värde

De kan kallas så här:

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

Excel har också många ytterligare funktioner som kan kallas med WorksheetFunction. Här är ett exempel på Excel IsText -funktionen:

12 Om Application.WorksheetFunction.IsText (Range ("a2"). Värde) Sedan _MsgBox "Cell är text"

Du kan också skapa dina egna användardefinierade funktioner (UDF). Nedan kommer vi att skapa en enkel boolsk funktion som returnerar TRUE. Då kallar vi den funktionen i vårt If -uttalande:

1234567891011 Sub If_Function ()Om TrueFunction DåMsgBox "True"Avsluta omAvsluta SubFunktion TrueFunction () som boolesktTrueFunction = TrueAvsluta funktion

Jämför text

Du kan också jämföra text som liknar siffror:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
När du jämför text måste du vara uppmärksam på ”Fallet” (övre eller nedre). Som standard anser VBA att bokstäver med olika fall inte matchar. Med andra ord "A" "a".Om du vill att VBA ska ignorera fall, måste du lägga till alternativet Jämför textdeklaration högst upp i din modul:
1 Alternativ Jämför text

Efter att ha deklarerat "A" = "a":
12345 Alternativ Jämför textSub If_Text ()MsgBox "a" = "A"Avsluta Sub

VBA Om du gillar

Med VBA Like Operator kan du göra inexakta jämförelser av text. Klicka på länken "Like Operator" för att lära dig mer, men vi kommer att visa ett grundläggande exempel nedan:

12345678 Dim strName som strängstrName = "Mr. Charles"Om strName Gilla "Mr*" DåMsgBox "True"AnnanMsgBox "Falskt"Avsluta om

Här använder vi ett asterisk "*" jokertecken. * Står för valfritt antal tecken. Så ovanstående If -sats kommer att returnera TRUE. Like-operatören är ett extremt kraftfullt men ofta underutnyttjat verktyg för att hantera text.

Om slingor

VBA Loops låter dig upprepa åtgärder. Att kombinera IF-ELSE med Loops är ett bra sätt att snabbt bearbeta många beräkningar.

Fortsätter vi med vårt positiva / negativa exempel kommer vi att lägga till en för varje loop för att gå igenom ett antal celler:

1234567891011121314 Sub If_Loop ()Dim Cell som intervallFör varje cell i intervallet ("A2: A6")Om Cell.Value> 0 DåCell.Offset (0, 1) .Value = "Positive"ElseIf Cell.Value <0 SedanCell.Offset (0, 1) .Value = "Negativt"AnnanCell.Offset (0, 1) .Value = "Noll"Avsluta omNästa cellAvsluta Sub

Om andra exempel

Nu ska vi gå över några mer specifika exempel.

Kontrollera om cellen är tom

Denna kod kontrollerar om en cell är tom. Om den är tom kommer den att ignorera cellen. Om den inte är tom kommer den att mata ut cellvärdet till cellen till höger:
1234567 Sub If_Cell_Empty ()If Range ("a2"). Value "" ThenOmråde ("b2"). Värde = intervall ("a2"). VärdeAvsluta omAvsluta Sub

Kontrollera om cellen innehåller specifik text

Instr -funktionen testar om en textsträng finns i en annan sträng. Använd den med en If -sats för att kontrollera om en cell innehåller specifik text:
123 Om Instr (intervall ("A2"). Värde, "text")> 0 SedanMsgbox "Text hittades"Avsluta om

Kontrollera om cellen innehåller text

Denna kod testar om en cell är text:
1234567 Sub If_Cell_Is_Text ()Om Application.WorksheetFunction.IsText (intervall ("a2"). Värde) SedanMsgBox "Cell är text"Avsluta omAvsluta Sub

Om Goto

Du kan använda resultatet av en If -sats till "Gå till" ett annat avsnitt av kod.
12345678910 Sub IfGoTo ()Om IsError (Cell.value) DåGå till SkipAvsluta om'Någon kodHoppa:Avsluta Sub

Ta bort rad om cellen är tom

Med Ifs och loops kan du testa om en cell är tom och i så fall ta bort hela raden.
123456789 Sub DeleteRowIfCellBlank ()Dim Cell As RangeFör varje cell i intervallet ("A2: A10")Om Cell.Value = "" Då Cell.EntireRow.DeleteNästa cellAvsluta Sub

Om MessageBox Ja / Nej

Med VBA -meddelanderutor kan du be användaren att välja bland flera alternativ. Meddelandefältet Ja / Nej uppmanar användaren att välja Ja eller Nej. Du kan lägga till en Ja / Nej -meddelanderuta i ett förfarande för att fråga användaren om de vill fortsätta köra proceduren eller inte. Du hanterar användarens inmatning med hjälp av en If -sats.Här är Ja/Nej -meddelanderutan i praktiken:
123456789101112 Sub MsgBoxVariable ()Dim svar Som heltalanswer = MsgBox ("Vill du fortsätta?", vbQuestion + vbYesNo)Om svar = vbJa DåMsgBox "Ja"AnnanMsgBox "Nej"Avsluta omAvsluta Sub

VBA If, ElseIf, Else i Access VBA

Funktionerna If, ElseIf och Else fungerar exakt samma i Access VBA som i Excel VBA.

Du kan använda en If -sats för att kontrollera om det finns poster i en Recordset.

wave wave wave wave wave