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:
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.
