In dit artikel ga ik het onderwerp IF statements behandelen. Een If statement is een onderdeel wat in 99% van mijn macro’s zit. Wat is dan precies een If statement? Het is in feite een soort van beslisboom binnen je code. Je schetst als het ware meerdere scenario’s hoe je script kan lopen en definieert per scenario welke actie je script moet uitvoeren. Dit klinkt natuurlijk erg abstract, maar het zal een stuk duidelijker worden aan de hand van een aantal praktijkvoorbeelden.
Voorbeeld van een simpel If Statement in VBA
Stel je hebt een sheet waarin een gebruiker een leeftijd dient in te voeren. Je schrijft dan een macro die de gebruiker via een msgbox toont of die persoon volwassen of onvolwassen is. Dit is een vrij simpele IF statement die je als volgt schrijft:
Sub IfStatementToepassing()
leeftijd = InputBox("Vul hier je leeftijd in")
If leeftijd >= 18 Then
MsgBox "Je bent volwassen"
Else
MsgBox "Je bent onvolwassen"
End If
End Sub
De eerste regel van het If statement begin je altijd met ‘IF’ gevolgd door je stelling en daarna sluit je af met ‘Then’. De actie die je uitvoert indien die stelling klopt plaats je dan direct onder die regel. Zorg altijd voor inspringen binnen een If statement om de code goed leesbaar te houden. Na dat je de actie hebt uitgeschreven kun je meerdere dingen doen. Je kunt het IF statement afsluiten door ‘End If’ te plaatsen. Er zal in het bovenstaande voorbeeld dan geen berichtbox worden getoond die je aangeeft dat je onvolwassen bent. Het script loopt dan simpelweg af zonder vervolgactie.
Wij hebben er voor gekozen om daar een ‘else’ te plaatsen. De ‘else’ vormt eigenlijk de combinatie van alle andere mogelijkheden als de leeftijd niet hoger of gelijk aan 18 is. Dat resulteert in dit geval tot de bewering dat je onvolwassen bent. Je had dit ook op deze manier kunnen uitschrijven.
Sub IfStatementToepassing()
leeftijd = InputBox("Vul hier je leeftijd in")
If leeftijd >= 18 Then
MsgBox "Je bent volwassen."
ElseIf leeftijd < 18 Then
MsgBox "Je bent onvolwassen."
End If
End Sub
Elseif gebruiken binnen je If statement in VBA
De bovenstaande code geeft exact dezelfde uitkomst als de eerste code uit mijn artikel. Er is echter wel een wezenlijk verschil tussen deze twee opties. Na een ‘Else’ zijn alle mogelijke uitkomsten namelijk afgevangen. Je kunt dan niets anders schrijven dan een ‘End If’ om je If statement af te sluiten. Als je kiest voor een 2e ‘ElseIf’ heb je nog de mogelijkheid om een verdeling aan te brengen indien het antwoord lager dan 18 uitvalt. Hiervoor dien je wel een een 2e stelling mee te geven aan de 1e ‘Elseif’. Dit klinkt lastig, maar dit is erg eenvoudig uit te schrijven.
Sub IfStatementToepassing()
leeftijd = InputBox("Vul hier je leeftijd in")
If leeftijd >= 18 Then
MsgBox "Je bent volwassen."
ElseIf leeftijd < 18 And leeftijd > 12 Then
MsgBox "Je bent onvolwassen."
Else
MsgBox "Je bent nog een kind."
End If
End Sub
Nesten van If statements
Je kunt if statements ook nesten indien dat voor jou makkelijker te lezen is. Je schrijft dan een 2e if statement binnen het eerste If statement. Als we dit toepassen op het bovenstaande voorbeeld krijg je deze code.
Sub IfStatementToepassing3()
leeftijd = InputBox("Vul hier je leeftijd in")
If leeftijd >= 18 Then
MsgBox "Je bent volwassen."
ElseIf leeftijd < 18 Then
If leeftijd > 12 Then
MsgBox "Je bent onvolwassen."
Else
MsgBox "Je bent nog een kind."
End If
End If
End Sub
Het is market practice om de eerste manier van schrijven te hanteren, maar er zijn wel situaties waarin je eigenlijk niet anders kan dan IF statements te nesten. Dit komt zo meteen aan bod in de logische operatoren paragraaf.
If statement uitschrijven op één regel
Naast de klassieke manier van het schrijven van een If statement in blokken kun je hem ook nog op een andere manier uitschrijven. Je kunt hem namelijk ook in zijn geheel op één regel uitschrijven. Je hoeft de hem dan zelfs niet af te sluiten met een ‘End if’. Deze komt er dan als volgt uit te zien:
If ActiveSheet.Range("A1") = 10 Then MsgBox "het getal is tien"
Ondanks dat deze manier van schrijven korter is gebruik ik deze persoonlijk niet met als reden dat ik de code zo minder prettig leesbaar vind.
Het gebruik van logische operatoren
Je kunt bij een If statement gebruik maken van 6 logische operatoren om te testen of er aan een bepaalde voorwaarde is voldaan:
- and
- or
- Xor
- Not
- Is
- Like
And
We hebben eerder in dit artikel al een voorbeeld gebruikt waarbij we binnen een ElseIf statement een dubbele stelling hebben geplaatst door deze toe te voegen met het woordje ‘and’. Dit betekent dat de actie die daaronder is uitgeschreven alleen uitgevoerd wordt indien aan beide stellingen voldaan is.
Or
Je kunt de code ook aanpassen door het woordje ‘and’ te veranderen naar ‘or’. De code zal dan uitgevoerd worden indien aan 1 v/d 2 voorwaardes voldaan is. Met de ‘and’ kun je zoveel mogelijk stellingen achter elkaar schrijven. Indien je enkel ‘Or’ schrijft is dat ook geen probleem. Je code zal onverwachts gedrag gaat vertonen als je meerdere ‘Or’s’ en ‘and’s’ gaat combineren. In dit geval kun je beter gebruik maken van het nesten van If Statements.
Xor
De Xor operator betekent dat de code uitgevoerd wordt indien er exact aan één van de condities voldaan is. De Xor operator maakt een vergelijking tussen 2 of meerdere condities. In de praktijk zul je deze operator zo goed als nooit gebruiken.
Not
Door Not toe te passen draai je eigenlijk de uitkomst van de conditie om. True wordt dan False en andersom. Ik gebruik Not vaak in combinatie met de range find methode. Je voorwaarde is in dit geval dat je niet niks mag vinden. Met andere woorden, je moet het zoekwoord ergens vinden om de code daaronder af te spelen.
If Not WsZoek.Range("A1:A10").Find(zoekopdracht) Is Nothing Then
Kolom = WsZoek.Range("A1:A10").Find(zoekopdracht).Column
MsgBox Kolom
Else
MsgBox "Niks gevonden helaas."
End If
Is
Met de Is operator kun je controleren of twee verschillende object variabelen hetzelfde object bevatten. Laten we voor deze operator een voorbeeld gebruiken om je een duidelijker beeld te geven
Sub ISoperator()
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim sheet3 As Worksheet
Set sheet1 = ThisWorkbook.Sheets("blad1")
Set sheet2 = ThisWorkbook.Sheets("blad2")
Set sheet3 = ThisWorkbook.Sheets("blad1")
If sheet1 Is sheet2 Then
MsgBox "Uitkomst 1"
ElseIf sheet1 Is sheet3 Then
MsgBox "Uitkomst 2"
Else
MsgBox "Uitkomst 3"
End If
End Sub
Als je de bovenstaande sub start zul je zien dat de uitkomst van code ‘Uitkomst 2’. De sheet1 variabele is immers gelijk aan de sheet3 variabele. Ze bevatten beide de worksheet “blad1”.
Like
Met de Like operator kun je voor 2 verschillende strings of ze minimaal gedeeltelijk overeenkomen. Je kunt nu door bepaalde tekst met een wildcard (*) te vervangen dit stuk van de string niet meenemen in de vergelijking.
Sub Likeoperator()
Dim kleur As String
kleur1 = "lichtgroen"
kleur2 = "*groen"
If kleur1 Like kleur2 Then
MsgBox "kleur komt overeen"
Else
MsgBox "kleur komt niet overeen"
End If
End Sub
De uitkomst van de bovenstaande code is dat de kleur overeenkomt. Dit komt omdat de wildcard in de 2e variabele is geplaatst voor het woord groen. Hierdoor wordt het tekstdeel “licht” in de eerste variabele genegeerd voor de vergelijking.
Wiskundige vergelijkingen
Met een IF statement kun je verschillende types variabelen met elkaar vergelijken. Als het gaat om tekst dan zijn er weinig mogelijkheden voor een vergelijking mogelijk. De tekst komt dan overeen, hij komt niet overeen, of gedeeltelijk overeen indien je ‘like Toepast.
Betreft het een vergelijking tussen getallen dan kun je een stuk meer variaties kwijt in de voorwaarden
| Voorwaarde | Wordt aan voldaan wanneer? |
|---|---|
| X > 10 | als X groter is dan 10 |
| X < 10 | als X kleiner is dan 10 |
| X >= 10 | als X groter of gelijk is aan 10 |
| X <= 10 | als X kleiner of gelijk is aan 10 |
| X = 10 | als X gelijk is aan 10 |
| X <> 10 | als X niet gelijk is aan 10 |
Ik hoop dat de uitleg in dit artikel voor iedereen duidelijk is. Mocht je nog een vraag hebben, laat het weten in de reacties!
Pingback:Inputbox Msgbox VBA Excel - Macro Excel Advies
Pingback:Select Case in een macro - Macro Excel Advies
Pingback:De range.find methode VBA Excel - Macro Excel Advies
Pingback:Fouten in je VBA code herstellen - Macro Excel Advies
Pingback:For loops binnen een macro gebruiken -
Hoe kan ik een cell inhoud vergelijken met een andere cell inhoud, b.v. de waarde in C10 is gelijk aan de waarde in cell D10. Indien JA dan de kleur groen indien NEE dan kleur rood.
Hoi Harm,
Dit kan op de volgende manier:
rood = RGB(255, 0, 0)groen = RGB(0, 128, 0)
If Blad1.Range("C10") = Blad1.Range("D10") Then
Blad1.Range("C10:D10").Interior.Color = groen
Else
Blad1.Range("C10:D10").Interior.Color = rood
End If
Mvg,
Martin