Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Voorwaardelijke Logica | VBA Fundamentals
Excel VBA voor Bedrijfsautomatisering

Voorwaardelijke Logica

Veeg om het menu te tonen

Tot nu toe ging alles over het opslaan en testen van waarden. Voorwaardelijke logica is waar je code daadwerkelijk beslissingen gaat nemen — het uitvoeren van het ene blok instructies in plaats van het andere, afhankelijk van de uitkomst van die tests.

If...Then

De eenvoudigste vorm: voer één actie uit, alleen als aan één voorwaarde wordt voldaan.

If currentStock < reorderLevel Then
    MsgBox "Reorder needed!"
End If

Als de voorwaarde If is, slaat VBA simpelweg alles na End If over — er gebeurt niets en er treedt geen fout op.

If...ElseIf...Else

Behandelt meer dan twee mogelijke uitkomsten door voorwaarden te koppelen:

If currentStock = 0 Then
    status = "Out of Stock"
ElseIf currentStock < reorderLevel Then
    status = "Reorder Now"
ElseIf currentStock < reorderLevel * 2 Then
    status = "Watch Closely"
Else
    status = "Healthy"
End If

VBA controleert deze van boven naar beneden en stopt bij de allereerste voorwaarde die True is — de rest wordt niet meer gecontroleerd, zelfs als een latere voorwaarde technisch gezien ook True zou zijn. Dit is precies waarom de volgorde belangrijk is: als currentStock 0 is, wordt de eerste voorwaarde (= 0) direct opgepakt en krijgt status onmiddellijk de waarde "Out of Stock". Merk op dat 0 technisch gezien ook kleiner is dan reorderLevel, dus als de regel ElseIf currentStock < reorderLevel eerst zou worden gecontroleerd, zou er onterecht "Reorder Now" worden gerapporteerd voor een artikel dat volledig op is. Door de meest specifieke, meest urgente voorwaarde eerst te plaatsen — en pas daarna bredere voorwaarden te gebruiken — werkt een keten als deze correct.

Select Case

Wanneer je één enkele variabele controleert op meerdere mogelijke vaste waarden, zegt Select Case hetzelfde als een lange ElseIf-keten, maar het leest duidelijker:

Select Case category
    Case "Electronics"
        discountRate = 0.05
    Case "Office"
        discountRate = 0.1
    Case Else
        discountRate = 0
End Select

Select Case behandelt ook reeksen getallen op elegante wijze, wat moeilijker leesbaar is als een keten van ElseIf-vergelijkingen:

Select Case currentStock
    Case 0
        status = "Out of Stock"
    Case 1 To 19
        status = "Low"
    Case 20 To 49
        status = "Adequate"
    Case Is >= 50
        status = "Well Stocked"
End Select

Case 1 To 19 komt overeen met elke waarde van 1 tot en met 19; Case Is >= 50 gebruikt Is om te vergelijken met de variabele die wordt getest in plaats van een vaste reeks.

Opdracht

  1. Schrijf een Sub met een Select Case-blok (zoals hierboven) dat een statusstring toekent op basis van een hardcoded voorraadnummer.
  2. Test deze drie keer binnen dezelfde Sub door de voorraadwaarde te wijzigen: probeer 0, 15 en 134, en print het resultaat telkens met Debug.Print.
  3. Voeg een vierde conditie toe voor exact 20 (het reorder-niveau van het toetsenbord) en controleer welke Case deze opvangt.
Hint
expand arrow

1. Het schrijven van de Sub met Select Case

  • Declareer één variabele om het voorraadnummer op te slaan en één om de resulterende tekst (status) te bewaren.
  • Ken de voorraadvariabele eerst een vaste waarde toe (bijv. stockLevel = 0), en voer deze vervolgens uit met Select Case stockLevel — kopieer dezelfde Case-structuur uit het voorbeeld van sectie 2.4 (Case 0, Case 1 To 19, Case 20 To 49, Case Is > 50).
  • Elke Case moet een andere tekstwaarde aan status toewijzen.

2. Drie waarden testen in één Sub

  • Je hebt geen drie aparte procedures nodig — verander gewoon de waarde van de variabele, voer het Select Case-blok uit, druk het resultaat af, verander vervolgens opnieuw de waarde en voer het nogmaals uit, allemaal binnen dezelfde Sub, direct achter elkaar.
  • Na elke toewijzing toont Debug.Print status het resultaat in het Direct-venster zonder pop-ups die de andere twee tests onderbreken.

3. Een case toevoegen voor precies 20

  • Ga terug naar het oorspronkelijke voorbeeld uit sectie 2.4 en kijk goed waar Case 1 To 19 eindigt en Case 20 To 49 begint — één van deze twee omvat 20 al.
  • Omdat Select Case stopt bij de eerste overeenkomst, verandert het toevoegen van een aparte Case 20-regel alleen iets als je deze voor de case plaatst die het anders zou opvangen.
  • Voer het uit met stockLevel = 20 specifiek en controleer welk bericht wordt afgedrukt — dat vertelt je welke Case het daadwerkelijk heeft opgevangen, zonder dat je iets nieuws hoeft toe te voegen.
Oplossing
expand arrow
Sub ClassifyStockLevels()
    Dim stockLevel As Integer
    Dim status As String

    ' --- Test 1 ---
    stockLevel = 0
    Select Case stockLevel
        Case 0
            status = "Out of Stock"
        Case 20
            status = "Exactly at Reorder Level"
        Case 1 To 19
            status = "Low"
        Case 20 To 49
            status = "Adequate"
        Case Is > 50
            status = "Well Stocked"
    End Select
    Debug.Print stockLevel & " -> " & status

    ' --- Test 2 ---
    stockLevel = 15
    Select Case stockLevel
        Case 0
            status = "Out of Stock"
        Case 20
            status = "Exactly at Reorder Level"
        Case 1 To 19
            status = "Low"
        Case 20 To 49
            status = "Adequate"
        Case Is > 50
            status = "Well Stocked"
    End Select
    Debug.Print stockLevel & " -> " & status

    ' --- Test 3 ---
    stockLevel = 134
    Select Case stockLevel
        Case 0
            status = "Out of Stock"
        Case 20
            status = "Exactly at Reorder Level"
        Case 1 To 19
            status = "Low"
        Case 20 To 49
            status = "Adequate"
        Case Is > 50
            status = "Well Stocked"
    End Select
    Debug.Print stockLevel & " -> " & status

    ' --- Test 4: exactly 20 ---
    stockLevel = 20
    Select Case stockLevel
        Case 0
            status = "Out of Stock"
        Case 20
            status = "Exactly at Reorder Level"
        Case 1 To 19
            status = "Low"
        Case 20 To 49
            status = "Adequate"
        Case Is > 50
            status = "Well Stocked"
    End Select
    Debug.Print stockLevel & " -> " & status
End Sub
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 2. Hoofdstuk 4
some-alt