Werken met Operatoren
Veeg om het menu te tonen
Variabelen declareren geeft je een plek om waarden op te slaan. Operatoren zijn de manier waarop je deze waarden combineert, vergelijkt en test — wat in feite betekent dat je een bedrijfsregel uitdrukt in code. "Is voorraad lager dan het bestelniveau?" is een vergelijkingsoperator. "Bestel bij als voorraad laag is EN het product Elektronica is" is een logische operator.
Rekenkundige operatoren
De meeste hiervan werken precies zoals je van een rekenmachine zou verwachten, maar VBA heeft twee delingsoperatoren die daadwerkelijk verschillende dingen doen:
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
De backslash (\) en Mod zijn de twee die mensen vaak verwarren, omdat ze op elkaar lijken maar tegenovergestelde vragen beantwoorden. 100 \ 3 beantwoordt de vraag "hoe vaak past 3 geheel in 100?" — het antwoord is 33, en wat overblijft wordt genegeerd. 100 Mod 3 beantwoordt de spiegelvraag: "wat blijft er over nadat 3 zo vaak mogelijk geheel in 100 is gegaan?" — het antwoord is 1. Samen vormen 33 groepjes van 3 plus een rest van 1 precies 100 — dat is geen toeval, dat is precies waar deze twee operatoren voor bedoeld zijn. Deze combinatie gebruik je bijvoorbeeld om te berekenen "hoeveel volle dozen van 3 kan ik vullen, en hoeveel eenheden blijven er over voor een gedeeltelijke doos?" of om te controleren of een rijnummer even is (i Mod 2 = 0).
Vergelijkingsoperatoren
Deze geven True of False terug:
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Logische operatoren
Deze combineren twee of meer vergelijkingen tot één True/False-resultaat — precies hoe een bedrijfsregel met meerdere voorwaarden wordt uitgedrukt:
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And vereist dat elke voorwaarde die ermee verbonden is True is voordat de hele expressie True wordt — het eerste voorbeeld wordt dus alleen uitgevoerd voor Elektronica-producten die ook daadwerkelijk een lage voorraad hebben, niet voor elk product met lage voorraad ongeacht de categorie. Or vereist dat slechts één voorwaarde True is, wat handig is om te controleren of een waarde tot een kleine set toegestane waarden behoort. Not keert simpelweg een True/False-resultaat om naar het tegenovergestelde — vaak gebruikt, zoals in het derde voorbeeld, om een regel uit te drukken als "NIET de ongunstige situatie" wanneer dat natuurlijker leest dan het direct formuleren van de gunstige situatie.
Tekst samenvoegen
Voegt tekst samen met & (niet +, want VBA gebruikt + voor getallen):
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Let op: currentStock is een getal (134), geen tekst, maar wordt toch zonder conversiestap aan de string toegevoegd — VBA zet automatisch een getal om naar tekst wanneer je & gebruikt. Dat gemak is precies waarom & de voorkeur heeft boven + bij het samenvoegen van tekst: als je "Stock: " + currentStock zou schrijven, zou VBA proberen de hele expressie als rekenkundig te interpreteren en een foutmelding geven of een verwarrend resultaat opleveren, afhankelijk van de context. & betekent altijd "voeg samen als tekst," zonder enige dubbelzinnigheid.
Opdracht
- Gebruik de gegevens van de Monitor Arm (Price 89.99, Stock 18, Reorder Level 10) en schrijf een expressie die controleert of de voorraad kleiner dan of gelijk is aan het bestelniveau plus 10 — een "bijna op" waarschuwing in plaats van een harde melding.
- Bouw een samengevoegd bericht: "Monitor Arm is at 18 units (reorder at 10)" met behulp van variabelen, niet hardgecodeerde tekst.
1. De "bijna bereikt"-uitdrukking
- Je hebt eerst drie variabelen nodig: iets om de voorraad (18) vast te houden, iets voor het bestelniveau (10), en dan een uitdrukking die deze vergelijkt.
- "Kleiner dan of gelijk aan" is één enkele vergelijkingsoperator
<=. - De uitdrukking "bestelniveau plus 10" betekent dat je de voorraad niet direct vergelijkt met 10 — je vergelijkt deze met een berekende waarde. Schrijf die optelling direct in de vergelijking:
stock <= reorderLevel + 10. - Om het resultaat daadwerkelijk te zien, wijs je het toe aan een
Boolean-variabele. - Reken handmatig uit wat
10 + 10is voordat je het uitvoert, zodat je weet of18 <= 20TrueofFalsemoet opleveren, en controleer of je code hiermee overeenkomt.
2. Het bericht opbouwen
- De operator die tekst samenvoegt is
&, niet+. - Bekijk het gewenste resultaat stuk voor stuk:
"Monitor Arm is at "+ (het voorraadnummer) +" units (reorder at "+ (het bestelniveau) +")". Tel de onderdelen — het zijn er vijf, afwisselend letterlijke tekst tussen aanhalingstekens en een variabele. - De opdracht zegt "gebruik variabelen, geen hardgecodeerde tekst" — dat betekent dat de
18en10in je uiteindelijke bericht uit je voorraad- enreorderLevel-variabelen moeten komen, niet als getypte getallen in de string. - Een getal samenvoegen met
&vereist geen conversie — VBA zet het automatisch om naar tekst, dus je kunt een numerieke variabele direct in de string samenvoegen. - Bouw het eerst op in één
String-variabele (message = ...), en toon het dan metMsgBox messagezodat je kunt controleren of het precies overeenkomt met de verwachte uitvoer, inclusief de haakjes en spaties.
Of gebruik de volgende code
Open Section_2_VBA_Fundamentals.xlsm, druk op Alt+F11, en gebruik de module waarin je voor deze werkmap werkt (voeg er een toe via Invoegen → Module als je er nog geen hebt — volg hetzelfde patroon als modIntro in Sectie 1, je zou deze modFundamentals kunnen noemen).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Klik ergens in de Sub en druk dan op F5. Je zou twee berichtenvensters na elkaar moeten zien verschijnen — eerst True (omdat 18 ≤ 20), daarna de zin.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.