Menu Sluiten

Hoe gebruik ik een If statement in VBA?

If stament macro VBA excel

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:

  1. and
  2. or
  3. Xor
  4. Not
  5. Is
  6. 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

VoorwaardeWordt aan voldaan wanneer?
X > 10als X groter is dan 10
X < 10als X kleiner is dan 10
X >= 10als X groter of gelijk is aan 10
X <= 10als X kleiner of gelijk is aan 10
X = 10als X gelijk is aan 10
X <> 10als 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!

Heeft dit artikel je geholpen?

7 reacties

  1. Pingback:Inputbox Msgbox VBA Excel - Macro Excel Advies

  2. Pingback:Select Case in een macro - Macro Excel Advies

  3. Pingback:De range.find methode VBA Excel - Macro Excel Advies

  4. Pingback:Fouten in je VBA code herstellen - Macro Excel Advies

  5. Pingback:For loops binnen een macro gebruiken -

  6. Harm

    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.

    • MartinR

      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

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *