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

VBA If-instructie

Als dan

Met VBA If-statements kunt u testen of expressies WAAR of ONWAAR zijn, door verschillende code uit te voeren op basis van de resultaten.Laten we een eenvoudig voorbeeld bekijken:
1 If Range ("a2"). Waarde > 0 Dan Range ("b2"). Waarde = "Positief"
Hiermee wordt getest of de waarde in bereik A2 groter is dan 0. Zo ja, stel bereik B2 in op "Positief"Opmerking: bij het testen van omstandigheden zullen we de =, >, <, , = vergelijkingsoperatoren gebruiken. We zullen ze later in het artikel in meer detail bespreken.Hier is de syntaxis voor een eenvoudige eenregelige If-instructie:
1 Als [test_expression] dan [action]
Om het leesbaarder te maken, kunt u een regelvervolgteken (underscore) gebruiken om de If-statements uit te breiden tot twee regels (zoals we deden in de bovenstaande afbeelding):
12 Als [test_expression] dan _[actie]
12 If Range ("a2"). Waarde > 0 Dan _Bereik ("b2"). Waarde = "Positief"

Stop als

Het bovenstaande "enkele regel" if-statement werkt goed wanneer u één voorwaarde test. Maar aangezien uw IF-statements ingewikkelder worden met meerdere voorwaarden, moet u een "End If" toevoegen aan het einde van het if-statement:
123 Als Bereik ("a2"). Waarde > 0 DanBereik ("b2"). Waarde = "Positief"Stop als

Hier is de syntaxis:

123 Als [test_expression] dan[actie]Stop als

De End If betekent het einde van de if-statement.

Laten we nu een ElseIF toevoegen:

ElseIF - Meerdere voorwaarden

De ElseIf wordt toegevoegd aan een bestaande If-instructie. ElseIf test of aan een voorwaarde is voldaan ALLEEN als niet aan de vorige voorwaarden is voldaan.In het vorige voorbeeld hebben we getest of een celwaarde positief is. Nu gaan we ook testen of de celwaarde negatief is met een ElseIf:
12345 Als Bereik ("a2"). Waarde > 0 DanBereik ("b2"). Waarde = "Positief"ElseIf Range ("a2"). Waarde < 0 DanBereik ("b2"). Waarde = "Negatief"Stop als

U kunt meerdere ElseIfs gebruiken om op meerdere voorwaarden te testen:

1234567891011 Sub If_Multiple_Conditions()If Range ("a2"). Waarde = "Cat" DanBereik ("b2"). Waarde = "Miauw"ElseIf Range ("a2"). Waarde = "Hond" DanBereik ("b2"). Waarde = "Inslag"ElseIf Range ("a2"). Waarde = "Eend" DanBereik ("b2"). Waarde = "Quack"Stop alsEinde sub

Nu zullen we een . toevoegen Anders:

Anders

De Anders zal lopen als er is niet aan andere eerdere voorwaarden voldaan.

We zullen ons voorbeeld beëindigen door een Else te gebruiken om aan te geven dat als de celwaarde niet positief of negatief is, deze nul moet zijn:

1234567 Als Bereik ("a2"). Waarde > 0 DanBereik ("b2"). Waarde = "Positief"ElseIf Range ("a2"). Waarde < 0 DanBereik ("b2"). Waarde = "Negatief"AndersBereik ("b2"). Waarde = "Nul"Stop als

Als-Anders

Het meest voorkomende type If-statement is een eenvoudig If-Else:

1234567 Sub If_Else()Als Bereik ("a2"). Waarde > 0 DanBereik ("b2"). Waarde = "Positief"AndersBereik ("b2"). Waarde = "Niet positief"Stop alsEinde sub

Geneste IF's

U kunt if-statements ook in elkaar "nesten".

1234567891011 Sub geneste_Ifs()Als Bereik ("a2"). Waarde > 0 DanBereik ("b2"). Waarde = "Positief"AndersAls Bereik ("a2"). Waarde < 0 DanBereik ("b2"). Waarde = "Negatief"AndersBereik ("b2"). Waarde = "Nul"Stop alsStop alsEinde sub

ALS - Of, En, Xor, Niet

Vervolgens bespreken we de logische operatoren: Or, And, Xor, Not.

Als Or

De Of operator test of er is aan minimaal één voorwaarde voldaan.

De volgende code test of de waarde in bereik A2 kleiner is dan 5.000 of groter dan 10.000:

123 Als Bereik ("a2"). Waarde 10000 DanRange ("b2"). Waarde = "Buiten bereik"Stop als

U kunt meerdere Or's in één regel opnemen:

123 If Range ("a2"). Waarde 10000 Of Range ("a2"). Waarde = 9999 DanRange ("b2"). Waarde = "Buiten bereik"Stop als

Als je meerdere Or's gaat gebruiken, is het aan te raden om een ​​regelvervolgteken te gebruiken om je code leesbaarder te maken:

123456 If Range ("a2"). Waarde < 5000 Of _Bereik ("a2"). Waarde > 10000 Of _Bereik ("a2"). Waarde = 9999 DanRange ("b2"). Waarde = "Buiten bereik"Stop als

Als En

Met de operator And kunt u testen of AAN ALLE voorwaarden is voldaan.

123 If Range ("a2"). Waarde >= 5000 en Range ("a2"). Waarde <= 10000 DanBereik ("b2"). Waarde = "Binnen bereik"Stop als

Als Xor

Met de Xor-operator kunt u testen of er is aan precies één voorwaarde voldaan. Als aan nul voorwaarden wordt voldaan, retourneert Xor FALSE. Als aan twee of meer voorwaarden wordt voldaan, retourneert Xor ook false.

Ik heb Xor zelden gebruikt in VBA-programmering.

Als niet

De operator Not wordt gebruikt om ONWAAR naar WAAR of WAAR naar ONWAAR te converteren:

123 Sub IF_Niet()MsgBox niet (waar)Einde sub

Merk op dat de Not-operator haakjes rond de expressie vereist om te wisselen.

De operator Not kan ook worden toegepast op If-instructies:

123 Indien niet (Bereik ("a2"). Waarde >= 5000 en Bereik ("a2"). Waarde <= 10000) DanRange ("b2"). Waarde = "Buiten bereik"Stop als

Als vergelijkingen

Bij het maken van vergelijkingen gebruik je meestal een van de vergelijkingsoperatoren:

Vergelijkingsoperator Uitleg
= Gelijk aan
Niet gelijk aan
> Groter dan
>= Groter dan of gelijk aan
< Minder dan
<= Minder dan of gelijk aan

U kunt echter ook elke uitdrukking gebruiken of functie dat resulteert in WAAR of ONWAAR

Als - Booleaanse functie

Wanneer u expressies maakt voor If-statements, kunt u ook elke functie gebruiken die TRUE of False genereert. VBA heeft een paar van deze functies:

Functie Beschrijving
IsDatum Retourneert TRUE als expressie een geldige datum is
Is leeg Controleren op lege cellen of ongedefinieerde variabelen
IsError Controleer op foutwaarden
Is niets Controleer op NULL-waarde
Is Numeriek Controleer op numerieke waarde

Ze kunnen als volgt worden genoemd:

1 Als IsEmpty (Bereik ("A1"). Waarde) Dan MsgBox "Cel Leeg"

Excel heeft ook veel extra functies die kunnen worden aangeroepen met WorksheetFunction. Hier is een voorbeeld van de Excel IsText-functie:

12 If Application.WorksheetFunction.IsText(Range("a2").Value) Dan _MsgBox "Cel is tekst"

U kunt ook uw eigen door de gebruiker gedefinieerde functies (UDF's) maken. Hieronder zullen we een eenvoudige Booleaanse functie maken die TRUE retourneert. Dan zullen we die functie aanroepen in ons If-statement:

1234567891011 Sub If_Function()Als TrueFunctie DanMsgBox "True"Stop alsEinde subFunctie TrueFunction() As BooleanTrueFunctie = TrueFunctie beëindigen

Tekst vergelijken

U kunt ook tekst vergelijken die lijkt op het vergelijken van getallen:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Bij het vergelijken van tekst moet u rekening houden met de "Hoofdletter" (boven of onder). Standaard beschouwt VBA letters met verschillende hoofdletters als niet-overeenkomend. Met andere woorden, "A" "a".Als u wilt dat VBA hoofdletters negeert, moet u de Option Compare Text-declaratie bovenaan uw module toevoegen:
1 Optie Tekst vergelijken

Na het maken van die verklaring "A" = "a":
12345 Optie Tekst vergelijkenSub If_Text()MsgBox "a" = "A"Einde sub

VBA Indien leuk

Met de VBA Like Operator kunt u onnauwkeurige vergelijkingen van tekst maken. Klik op de link 'Vind ik leuk' voor meer informatie, maar we zullen hieronder een eenvoudig voorbeeld laten zien:

12345678 Dim strName als StringstrName = "Meneer Charles"Als strName Like "Mr*" DanMsgBox "True"AndersMsgBox "False"Stop als

Hier gebruiken we een asterisk "*" wildcard. De * staat voor een willekeurig aantal tekens. Dus de bovenstaande If-instructie zal TRUE retourneren. De Like-operator is een extreem krachtige, maar vaak onderbenutte tool voor het omgaan met tekst.

Als lussen

Met VBA-loops kunt u acties herhalen. Het combineren van IF-ELSE's met Loops is een geweldige manier om veel berekeningen snel te verwerken.

We gaan verder met ons voorbeeld Positief/Negatief en voegen een For Each Loop toe om een ​​reeks cellen te doorlopen:

1234567891011121314 Sub If_Loop()Dim Cell als bereikVoor elke cel binnen bereik ("A2:A6")Als Cell.Value > 0 DanCell.Offset(0, 1).Waarde = "Positief"ElseIf Cell.Waarde < 0 DanCell.Offset(0, 1).Waarde = "Negatief"AndersCell.Offset(0, 1).Waarde = "Nul"Stop alsVolgende celEinde sub

Als Anders Voorbeelden

Nu zullen we enkele meer specifieke voorbeelden bespreken.

Controleer of cel leeg is

Deze code controleert of een cel leeg is. Als het leeg is, wordt de cel genegeerd. Als het niet leeg is, wordt de celwaarde uitgevoerd naar de cel aan de rechterkant:
1234567 Sub If_Cell_Empty()If Range ("a2"). Waarde "" DanBereik ("b2"). Waarde = Bereik ("a2"). WaardeStop alsEinde sub

Controleer of cel specifieke tekst bevat

De Instr-functie test of een tekenreeks in een andere tekenreeks wordt gevonden. Gebruik het met een If-instructie om te controleren of een cel specifieke tekst bevat:
123 Als Instr(Bereik("A2").waarde,"tekst") > 0 DanBerichtbox "Tekst gevonden"Stop als

Controleer of cel tekst bevat

Deze code test of een cel tekst is:
1234567 Sub If_Cell_Is_Text()If Application.WorksheetFunction.IsText(Range("a2").Value) ThenMsgBox "Cel is tekst"Stop alsEinde sub

Als Ga naar

U kunt het resultaat van een If-instructie gebruiken om naar een ander gedeelte van de code te gaan.
12345678910 Sub IfGoTo ()Als IsError(Cell.value) DanGa naar OverslaanStop als'Enkele code'Overslaan:Einde sub

Rij verwijderen als cel leeg is

Met Ifs en loops kun je testen of een cel leeg is en zo ja de hele rij verwijderen.
123456789 Sub VerwijderRowIfCellBlank()Dim cel als bereikVoor elke cel binnen bereik ("A2:A10")If Cell.Value = "" Dan Cell.EntireRow.DeleteVolgende celEinde sub

Indien BerichtBox Ja / Nee

Met VBA-berichtenboxen kunt u de gebruiker vragen om uit verschillende opties te kiezen. De Ja/Nee-berichtenbox vraagt ​​de gebruiker om Ja of Nee te selecteren. U kunt een Ja/Nee-berichtenbox aan een procedure toevoegen om de gebruiker te vragen of hij de procedure wil voortzetten of niet. Je handelt de invoer van de gebruiker af met een If-statement.Hier is de Ja/Nee Berichtenbox in de praktijk:
123456789101112 Sub MsgBoxVariable()Dim antwoord als geheel getalanswer = MsgBox("Wilt u doorgaan?", vbQuestion + vbYesNo)Als antwoord = vbJa DanMsgBox "Ja"AndersMsgBox "Nee"Stop alsEinde sub

VBA If, ElseIf, Else in Access VBA

De functies If, ElseIf en Else werken in Access VBA precies hetzelfde als in Excel VBA.

U kunt een If-statement gebruiken om te controleren of er records in een Recordset zitten.

wave wave wave wave wave