VBA logisk Operators: OG, ELLER, IKKE, HVIS IKKE i Excel VBA

⚡ Smart opsummering

VBA logisk Operatorer kombinerer flere betingelser til et enkelt True eller False resultat. Denne side forklarer AND, OR og NOT med eksempler på kørbare kommandoknapper, en komplet sandhedstabel og de mindre kendte XOR-, Eqv- og Imp-operatorer.

  • 🔗 Formål: Logiske operatorer evaluerer mere end én betingelse i en enkelt If-sætning.
  • AND Operator: Returnerer kun Sand, når alle betingelser, den forbinder, er Sande.
  • OR Operator: Returnerer Sand, når mindst én af betingelserne er Sand.
  • 🔄 IKKE Operator: Inverterer et resultat, og ændrer Sand til Falsk og Falsk til Sand.
  • 📊 Sandhedstabel: Et enkelt referencegitter viser resultatet af hver operator for hver inputkombination.
  • 🧮 Ekstra Operators: Xor, Eqv og Imp håndterer eksklusive, ækvivalente og implicitte betingelser.
  • ⚠️ Ingen kortslutning: VBA evaluerer alle dele af en betingelse, så en guard-test skal sidde i en indlejret If-værdi.

VBA logisk Operatorer: OG, ELLER, IKKE i Excel VBA

Excel VBA Logisk Operatorer

Lad os sige, at du vil behandle en kundeordre. For det skal du først tjekke om det bestilte produkt findes eller ej. Hvis det gør, vil du også gerne tjekke, om mængden på hånden er nok. Logiske operatører er nyttige i sådanne tilfælde. Logiske operatorer bruges til at evaluere mere end én betingelse.

Hver betingelse er i sig selv opbygget ud fra sammenligning operatører og returnerer Sand eller Falsk. En logisk operator kombinerer derefter disse resultater til ét endeligt svar.

De vigtigste logiske Excel VBA-operatorer OG, ELLER, IKKE er angivet i tabellen nedenfor:

S / N OperaTor Beskrivelse Eksempel Produktion
1 AND OG: Dette bruges til at kombinere mere end én betingelse. Hvis alle betingelserne er sande, OG evalueres til sand. Hvis nogen af ​​betingelserne er falsk, AND evalueres til falsk Hvis (1 = 1) og (0 = 1) så falsk
2 OR ELLER: Dette bruges til at kombinere mere end én betingelse. Hvis nogen af ​​betingelserne evalueres til sand, returnerer OR sand. Hvis alle er falske, returnerer OR falsk Hvis (1 = 1) eller (5 = 0) så sand
3 IKKE IKKE: Denne fungerer som en omvendt funktion. Hvis betingelsen er sand, returnerer den falsk, og hvis en betingelse er falsk, returnerer den sand. Hvis ikke (0 = 0) Så falsk

De tre ovenstående beskrivelser er lettere at huske på som et enkelt gitter af input og resultater.

Sandhedstabel for VBA Logisk Operatorer

En sandhedstabel viser alle kombinationer af input og det resultat, som hver operator returnerer. Når du læser den én gang, fjerner du gætteriet fra enhver betingelse, du senere skriver.

Tilstand A Betingelse B A og B A eller B Ikke A
Sand Sand Sand Sand False
Sand False False Sand False
False Sand False Sand Sand
False False False False Sand

To mønstre er værd at huske. AND producerer True på kun én række ud af fire, så det indsnævrer et valg. OR producerer Falsk på kun én række, så den udvider den ene. IKKE tager én betingelse i stedet for to, hvilket er grunden til, at den har én egen kolonne.

VBA logisk Operators Eksempel Kilde Code

For nemheds skyld sammenligner vi hårdt kodede tal.

Tilføj ActiveX-knapper til arket fra "Indsæt-indstilling".

Indstil egenskaberne som vist på billedet nedenfor

VBA logisk Operatorer
VBA logisk Operatorer

Følgende tabel viser de egenskaber, du skal ændre, og de værdier, du også skal opdatere.

S / N kontrol Ejendom Værdi
1 KommandoKnap1 Navn btnAND
Caption AND Operator (1 = 1) og (0 = 0)
2 KommandoKnap2 Navn btnOR
Caption OR Operator (1 = 1) Eller (5 = 0)
3 KommandoKnap3 Navn btn IKKE
Caption IKKE Operaeller Ikke (0 = 0)

Tilføj følgende kode til 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 Hvis OG OperaTor

  • "Hvis (1 = 1) Og (0 = 0) Så" if-sætningen bruger den logiske AND-operator til at kombinere to betingelser (1 = 1) og (0 = 0). Hvis begge betingelser er sande, udføres koden over 'Else' nøgleordet. Hvis begge betingelser ikke er sande, udføres koden under 'Else' nøgleordet.

Begge betingelser er sande her, så et klik på knappen viser "OG evalueret til SAND".

Tilføj følgende kode til 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 Hvis ELLER OperaTor

  • "Hvis (1 = 1) Eller (5 = 0) Så" if-sætningen bruger den logiske operator OR til at kombinere to betingelser (1 = 1) eller (5 = 0). Hvis en af ​​betingelserne er sand, udføres koden ovenfor Else-nøgleordet. Hvis begge betingelser er falske, udføres koden nedenfor Else-nøgleordet.

Den første betingelse er sand, og den anden er falsk, så ELLER returnerer stadig sandt, og meddelelsen lyder "ELLER evalueret til SAND".

Tilføj følgende kode til 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 hvis IKKE OperaTor

  • "Hvis ikke (0 = 0) så" VBA-funktionen If Not bruger den logiske operator NOT til at negere resultatet af if-sætningsbetingelsen. Den indre betingelse (0 = 0) er sand, så Not ændrer den til falsk, og koden under nøgleordet 'Else' udføres. Hvis den indre betingelse havde været falsk, ville Not have gjort den sand, og koden over 'Else' ville være kørt i stedet.

Disse tre knapper tester hver en fast værdi. Reelle betingelser læses fra regnearket og blander begge operatorfamilier.

Sådan kombinerer du logik og sammenligning Operatorer

En produktionsmakro tester sjældent et fast kodet tal. Den læser en værdi, sammenligner den og samler flere af disse sammenligninger i én beslutning. Makroen nedenfor godkender kun en ordre, når produktet findes, mængden er tilstrækkelig, og kundekontoen ikke er sat på hold.

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

Tre regler holder en kombineret betingelse læsbar og korrekt.

  • Parentes hver sammenligning: VBA evaluerer sammenligningsoperatorer før logiske, men parenteser danner gruppenping åbenlyse og forhindre en fejl, når tilstanden senere forværres.
  • Vær opmærksom på, at Og har forrang frem for Eller: A eller B og C læses som A eller (B og C)Hvis du mente (A eller B) og C, parenteserne er obligatoriske.
  • Anvend Ikke på et boolsk tal, ikke på et tal: Ikke på hold læser naturligt. Undgå Ikke 5, fordi Not udfører en bitvis operation på tal og returnerer -6 i stedet for False.

⚠️ Advarsel: VBA kortslutter ikke. Hvis (ws er ingenting) eller (ws.Name = "Data") så, den anden del kører stadig, selv når den første er sand, hvilket forårsager kørselsfejl 91. Opdel sådanne vagter i indbyggede If-sætninger.

XOR, Eqv og Imp Operatorer i VBA

AND, OR og NOT dækker næsten alle hverdagsbetingelser, men VBA leverer tre logiske operatorer mere, der lejlighedsvis udtrykker en regel langt tydeligere end en rede af If-udsagn.

OperaTor Returnerer Sand når Eksempel Produktion
xor Præcis én af de to betingelser er sand, aldrig begge (1 = 1) X eller (5 = 0) Sand
Eqv Begge betingelser har samme værdi, enten sande eller falske (1 = 1) Ligning (2 = 2) Sand
Imp Den første betingelse indebærer den anden; kun Sand Imp Falsk er falsk (1 = 1) Imp (5 = 0) False

Xor er den mest praktiske af de tre. Den passer til en regel som "en rabat gælder for et medarbejder eller et loyalitetsmedlem, men ikke for en person, der er begge dele". Ligninger og imp forekommer hovedsageligt i ældre kode og i logiske øvelser, så det er vigtigere at genkende dem end at skrive dem.

Download Excel, der indeholder ovenstående kode

Ofte Stillede Spørgsmål

Der er ingen praktisk grænse, men læsbarheden falder hurtigt til over tre eller fire. Flyt en lang betingelse til en boolsk variabel med et beskrivende navn, og test derefter variabelen i If-sætningen i stedet.

Anvendt på et tal, udfører Not en bitvis inversion i stedet for en logisk. Anvend den kun på en sammenligning eller en boolsk variabel, f.eks. Not (Antal > 0), så resultatet er Sandt eller Falsk.

Logikken matcher, men syntaksen er forskellig. En regnearkformel kalder dem som funktioner, AND(A1>0, B1>0). VBA placerer dem i stedet mellem betingelserne, som i Hvis A1 > 0 Og B1 > 0 Så.

Ja. Indsæt betingelsen, og en AI-assistent omskriver den med tydeligere parenteser eller opdeler den i navngivne boolske variabler. Verificer omskrivningen mod en sandhedstabel, fordi en forkert forenkling ændrer adfærd lydløst.

Ja. Angiv udtrykket, og en AI-assistent viser alle inputkombinationer med deres resultat, hvilket hurtigt afslører en gren, der aldrig kan nås, eller en parentes placeret i den forkerte position.

Opsummer dette indlæg med: