VBA Logisch Operators: EN, OF, NIET, ALS NIET in Excel VBA
⚡ Slimme samenvatting
VBA Logisch OperaOperatoren combineren meerdere voorwaarden tot één enkel resultaat, namelijk Waar of Onwaar. Deze pagina legt de operatoren AND, OR en NOT uit met voorbeelden van uitvoerbare commando's, een volledige waarheidstabel en de minder bekende operatoren Xor, Eqv en Imp.

Excel VBA Logisch Operaverdraaid
Stel dat u een klantorder wilt verwerken. Daarvoor wilt u eerst controleren of het bestelde product bestaat of niet. Als dat zo is, wilt u ook controleren of de voorraad voldoende is. Logische operatoren zijn in zulke gevallen handig. Logische operatoren worden gebruikt om meer dan één voorwaarde te evalueren.
Elke afzonderlijke voorwaarde is opgebouwd uit vergelijkingsoperatoren en retourneert Waar of Onwaar. Een logische operator combineert vervolgens die resultaten tot één definitief antwoord.
De belangrijkste logische Excel VBA-operatoren AND, OR en NOT staan in de onderstaande tabel:
| S / N | Operator | Beschrijving | Voorbeeld | uitgang |
|---|---|---|---|---|
| 1 | EN | EN: Dit wordt gebruikt om meer dan één voorwaarde te combineren. Als alle voorwaarden waar zijn, evalueert AND naar waar. Als een van de voorwaarden onwaar is, wordt AND geëvalueerd als onwaar | Als (1 = 1) en (0 = 1) dan | vals |
| 2 | OR | OF: Dit wordt gebruikt om meer dan één voorwaarde te combineren. Als een van de voorwaarden waar is, retourneert OR waar. Als ze allemaal onwaar zijn, retourneert OR onwaar | Als (1 = 1) of (5 = 0) dan | waar |
| 3 | NIET | NIET: Deze werkt als een inverse functie. Als de voorwaarde waar is, retourneert deze onwaar, en als een voorwaarde onwaar is, retourneert deze waar. | Als niet (0 = 0) dan | vals |
De drie bovenstaande beschrijvingen zijn gemakkelijker te onthouden als één raster van input en output.
Waarheidstabel voor logische VBA-code Operaverdraaid
Een waarheidstabel geeft een overzicht van alle mogelijke combinaties van invoerwaarden en het resultaat dat elke operator retourneert. Door de tabel één keer te lezen, hoef je niet meer te gissen bij het schrijven van voorwaarden.
| Conditie A | Conditie B | A en B | A of B | niet A |
|---|---|---|---|---|
| Waar | Waar | Waar | Waar | Niet waar |
| Waar | Niet waar | Niet waar | Waar | Niet waar |
| Niet waar | Waar | Niet waar | Waar | Waar |
| Niet waar | Niet waar | Niet waar | Niet waar | Waar |
Twee patronen zijn de moeite waard om te onthouden. EN Geeft slechts in één van de vier rijen 'True' weer, waardoor de selectie wordt beperkt. OR Geeft alleen op één rij de waarde 'False', dus wordt één rij breder gemaakt. NIET Het accepteert slechts één voorwaarde in plaats van twee, vandaar dat het een eigen kolom heeft.
VBA Logisch Operators Voorbeeld Bron Code
Om het eenvoudig te houden, vergelijken we hard gecodeerde getallen.
Voeg ActiveX-knoppen toe aan het blad via de optie 'Invoegen'.
Stel de eigenschappen in zoals weergegeven in de onderstaande afbeelding

In de onderstaande tabel ziet u welke eigenschappen u moet wijzigen en welke waarden u moet bijwerken.
| S / N | Controleer: | Eigendom | Waarde |
|---|---|---|---|
| 1 | CommandoKnop1 | Naam | btnAND |
| Onderschrift | EN Operator (1 = 1) En (0 = 0) | ||
| 2 | CommandoKnop2 | Naam | btnOR |
| Onderschrift | OR Operator (1 = 1) Of (5 = 0) | ||
| 3 | CommandoKnop3 | Naam | btnNIET |
| Onderschrift | NIET Operator Niet (0 = 0) |
Voeg de volgende code toe aan btnAND_Click
Private Sub btnAND_Click() If (1 = 1) And (0 = 0) Then MsgBox "AND evaluated to TRUE", vbOKOnly, "AND operator" Else MsgBox "AND evaluated to FALSE", vbOKOnly, "AND operator" End If End Sub
VBA Als EN Operator
- “Als (1 = 1) En (0 = 0) Dan” de if-instructie gebruikt de logische operator AND om twee voorwaarden te combineren (1 = 1) And (0 = 0). Als beide voorwaarden waar zijn, wordt de code boven het trefwoord 'Else' uitgevoerd. Als beide voorwaarden niet waar zijn, wordt de code onder het trefwoord 'Else' uitgevoerd.
Beide voorwaarden zijn hier waar, dus als je op de knop klikt, verschijnt "EN is geëvalueerd tot WAAR".
Voeg de volgende code toe aan btnOR_Click
Private Sub btnOR_Click() If (1 = 1) Or (5 = 0) Then MsgBox "OR evaluated to TRUE", vbOKOnly, "OR operator" Else MsgBox "OR evaluated to FALSE", vbOKOnly, "OR operator" End If End Sub
VBA Als OF Operator
- “Als (1 = 1) Of (5 = 0) Dan” De if-instructie gebruikt de logische operator OR om twee voorwaarden te combineren: (1 = 1) of (5 = 0). Als een van de voorwaarden waar is, wordt de code boven het trefwoord else uitgevoerd. Als beide voorwaarden onwaar zijn, wordt de code onder het trefwoord else uitgevoerd.
De eerste voorwaarde is waar en de tweede is onwaar, dus OR geeft nog steeds 'waar' terug en de boodschap luidt: "OR is geëvalueerd tot WAAR".
Voeg de volgende code toe aan btnNOT_Click
Private Sub btnNOT_Click() If Not (0 = 0) Then MsgBox "NOT evaluated to TRUE", vbOKOnly, "NOT operator" Else MsgBox "NOT evaluated to FALSE", vbOKOnly, "NOT operator" End If End Sub
VBA Als dat niet het geval is Operator
- “Zo niet (0 = 0) Dan” De VBA-functie IF NOT gebruikt de logische operator NOT om het resultaat van de voorwaarde in de IF-instructie te ontkennen. De interne voorwaarde (0 = 0) is waar, dus NOT maakt deze onwaar en de code onder het trefwoord 'Else' wordt uitgevoerd. Als de interne voorwaarde onwaar was geweest, zou NOT deze waar hebben gemaakt en zou de code boven 'Else' in plaats daarvan zijn uitgevoerd.
Deze drie knoppen testen elk een vaste waarde. De werkelijke omstandigheden worden afgelezen van het werkblad en er wordt gebruikgemaakt van een combinatie van beide typen operators.
Hoe combineer je logica en vergelijking? Operaverdraaid
Een productiemacro test zelden een vastgelegd getal. Hij leest een waarde, vergelijkt deze en combineert meerdere van die vergelijkingen tot één beslissing. De onderstaande macro keurt een bestelling alleen goed als het product bestaat, de hoeveelheid voldoende is en het klantaccount niet geblokkeerd is.
Sub ApproveOrder() Dim QtyOnHand As Long Dim QtyOrdered As Long Dim OnHold As Boolean QtyOnHand = Sheet1.Range("B2").Value QtyOrdered = Sheet1.Range("B3").Value OnHold = Sheet1.Range("B4").Value ' All three parts must hold for the order to pass If (QtyOrdered > 0) And (QtyOnHand >= QtyOrdered) And Not OnHold Then Sheet1.Range("B5").Value = "Approved" Else Sheet1.Range("B5").Value = "On hold" End If End Sub
Drie regels zorgen ervoor dat een gecombineerde situatie leesbaar en correct blijft.
- Maak bij elke vergelijking tussen haakjes: VBA evalueert vergelijkingsoperatoren vóór logische operatoren, maar haakjes maken de groeperingping duidelijk en voorkomt een fout wanneer de aandoening later verergert.
- Let op de voorrang van 'en' boven 'of': A of B en C wordt gelezen als A of (B en C)Als je bedoelde... (A of B) en CDe haakjes zijn verplicht.
- Niet toepassen op een Booleaanse waarde, niet op een getal: Niet in de wacht leest natuurlijk. Vermijd Niet 5, omdat Not een bitwise-bewerking uitvoert op getallen en -6 retourneert in plaats van False.
⚠️ Waarschuwing: VBA veroorzaakt geen kortsluiting. Als (ws Niets is) of (ws.Name = “Data”) danHet tweede deel wordt nog steeds uitgevoerd, zelfs als het eerste waar is, wat runtimefout 91 veroorzaakt. Splits dergelijke voorwaarden op in geneste If-instructies.
Xor, Eqv en Imp Operators in VBA
AND, OR en NOT dekken vrijwel elke alledaagse situatie, maar VBA biedt nog drie logische operatoren die een regel soms veel duidelijker uitdrukken dan een reeks IF-instructies.
| Operator | Retourneert True wanneer | Voorbeeld | uitgang |
|---|---|---|---|
| Xor | Precies één van de twee voorwaarden is waar, nooit beide. | (1 = 1) Xor (5 = 0) | Waar |
| Vergelijking | Beide voorwaarden hebben dezelfde waarde: beide waar of beide onwaar. | (1 = 1) Eqv (2 = 2) | Waar |
| kabouter | De eerste voorwaarde impliceert de tweede; alleen True Imp False is onwaar. | (1 = 1) Imp (5 = 0) | Niet waar |
XOR is de meest praktische van de drie. Het is geschikt voor een regel als "een korting geldt voor een medewerker of een loyaliteitslid, maar niet voor iemand die beide is". EqV en Imp komen vooral voor in oudere code en in logische oefeningen, dus het herkennen ervan is belangrijker dan ze zelf te schrijven.
Download Excel met bovenstaande code
