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.

  • 🔗 Doel: Logische operatoren evalueren meer dan één voorwaarde binnen één enkele If-instructie.
  • ✅ EN Operavoor: Geeft alleen True terug als aan alle voorwaarden waaraan het is gekoppeld, is voldaan.
  • ➕ OR Operavoor: Retourneert True wanneer ten minste één van de voorwaarden waar is.
  • 🔄 NIET Operavoor: Keert een resultaat om, waardoor Waar Onwaar wordt en Onwaar Waar.
  • 📊 Waarheidstabel: Een enkel referentierooster toont het resultaat van elke operator voor elke invoercombinatie.
  • 🧮 Extra OperaTorens: Xor, Eqv en Imp behandelen exclusieve, equivalente en impliciete voorwaarden.
  • ⚠️ Geen kortsluiting: VBA evalueert elk onderdeel van een voorwaarde, dus een controle moet in een geneste If-instructie worden geplaatst.

VBA Logisch Operators: AND, OR, NOT in Excel VBA

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

VBA Logisch Operaverdraaid
VBA Logisch Operaverdraaid

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

Veelgestelde vragen

Er is geen praktische limiet, maar de leesbaarheid neemt snel af na drie of vier regels. Verplaats een lange voorwaarde naar een Booleaanse variabele met een beschrijvende naam en test die variabele vervolgens in de If-instructie.

Toegepast op een getal voert Not een bitsgewijze inversie uit in plaats van een logische. Gebruik het alleen bij een vergelijking of een Booleaanse variabele, zoals Not (Qty > 0), zodat het resultaat True of False is.

De logica klopt, maar de syntaxis verschilt. Een werkbladformule roept ze aan als functies, AND(A1>0, B1>0). In VBA worden ze echter tussen de voorwaarden geplaatst, zoals in If A1 > 0 And B1 > 0 Then.

Ja. Plak de voorwaarde en een AI-assistent herschrijft deze met duidelijkere haakjes of splitst deze op in benoemde Booleaanse variabelen. Controleer de herschrijving aan de hand van een waarheidstabel, want een verkeerde vereenvoudiging verandert het gedrag ongemerkt.

Ja. Voer de expressie in en een AI-assistent geeft een lijst van alle mogelijke combinaties met het bijbehorende resultaat. Zo worden snel onbereikbare takken of verkeerd geplaatste haakjes opgespoord.

Vat dit bericht samen met: