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

⚡ Smart oppsummering

VBA logisk Operatorer kombinerer flere betingelser til et enkelt Sant eller Usant resultat. Denne siden forklarer AND, OR og NOT med eksempler på kjørbare kommandoknapper, en fullstendig sannhetstabell og de mindre kjente XOR-, Eqv- og Imp-operatorene.

  • 🔗 Formål: Logiske operatorer evaluerer mer enn én betingelse i en enkelt If-setning.
  • ✅ OG Operator: Returnerer Sann bare når alle betingelser den kobler til er Sann.
  • ➕ OR Operator: Returnerer Sann når minst én av betingelsene er Sann.
  • 🔄 IKKE Operator: Inverterer et resultat, og gjør Sann til Usann og Usann til Sann.
  • 📊 Sannhetstabell: Et enkelt referansenett viser resultatet av hver operator for hver inputkombinasjon.
  • 🧮 ekstra Operators: XOR, Eqv og Imp håndterer eksklusive, ekvivalente og implisitte betingelser.
  • ⚠️ Ingen kortslutning: VBA evaluerer alle deler av en betingelse, så en guard-test må sitte i en nestet If-verdi.

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

Excel VBA Logisk Operatorer

La oss si at du vil behandle en kundebestilling. For det, vil du først sjekke om det bestilte produktet eksisterer eller ikke. Hvis den gjør det, vil du også sjekke om mengden på hånden er nok. Logiske operatører kommer godt med i slike tilfeller. Logiske operatorer brukes til å evaluere mer enn én tilstand.

Hver betingelse er bygget opp fra sammenligning operatører og returnerer Sann eller Usann. En logisk operator kombinerer deretter disse resultatene til ett endelig svar.

De viktigste logiske Excel VBA-operatorene AND, OR, NOT er oppført i tabellen nedenfor:

S / N Operator Tekniske beskrivelser Eksempel Produksjon
1 OG OG: Dette brukes til å kombinere mer enn én betingelse. Hvis alle betingelsene er sanne, OG evalueres til sanne. Hvis noen av betingelsene er falske, OG evalueres til usann Hvis (1 = 1) og (0 = 1) så falsk
2 OR ELLER: Dette brukes til å kombinere mer enn én betingelse. Hvis noen av betingelsene evalueres til sann, returnerer OR sann. Hvis alle er falske, returnerer OR falsk Hvis (1 = 1) eller (5 = 0) så sant
3 IKKE IKKE: Denne fungerer som en invers funksjon. Hvis betingelsen er sann, returnerer den usann, og hvis en betingelse er usann, returnerer den sann. Hvis ikke (0 = 0) Så falsk

De tre beskrivelsene ovenfor er enklere å huske på som et enkelt rutenett av inndata og resultater.

Sannhetstabell for VBA Logic Operatorer

En sannhetstabell viser alle kombinasjoner av input og resultatet hver operator returnerer. Å lese den én gang fjerner gjettingen fra enhver betingelse du senere skriver.

Tilstand A Tilstand B A og B A eller B Ikke A
ekte ekte ekte ekte Falsk
ekte Falsk Falsk ekte Falsk
Falsk ekte Falsk ekte ekte
Falsk Falsk Falsk Falsk ekte

To mønstre er verdt å memorere. OG produserer True på bare én rad av fire, så det begrenser et utvalg. OR produserer Usann på bare én rad, så den utvider én. IKKE tar én enkelt betingelse i stedet for to, og det er derfor den har én egen kolonne.

VBA logisk Operators Eksempelkilde Code

For enkelhets skyld vil vi sammenligne hardkodede tall.

Legg til ActiveX-knapper på arket fra "Sett inn-alternativet."

Angi egenskapene som vist på bildet nedenfor

VBA logisk Operatorer
VBA logisk Operatorer

Tabellen nedenfor viser egenskapene du må endre og verdiene du også må oppdatere.

S / N Kontroll: Eiendom Verdi
1 Kommandoknapp1 Navn btnAND
Bildetekst OG Operator (1 = 1) og (0 = 0)
2 Kommandoknapp2 Navn btnOR
Bildetekst OR Operator (1 = 1) Eller (5 = 0)
3 Kommandoknapp3 Navn btnIKKE
Bildetekst IKKE Operaeller Ikke (0 = 0)

Legg til følgende kode i 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) Da" if-setningen bruker den logiske AND-operatoren for å kombinere to betingelser (1 = 1) og (0 = 0). Hvis begge betingelsene er sanne, kjøres koden over «Else»-nøkkelordet. Hvis begge betingelsene ikke er sanne, kjøres koden under 'Else'-nøkkelordet.

Begge betingelsene er sanne her, så hvis du klikker på knappen, vises «OG evaluert til SANN».

Legg til følgende kode i 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) Da" if-setningen bruker den logiske operatoren OR til å kombinere to betingelser (1 = 1) eller (5 = 0). Hvis noen av betingelsene er sanne, utføres koden over Else-nøkkelordet. Hvis begge betingelsene er usanne, utføres koden under Else-nøkkelordet.

Den første betingelsen er sann og den andre er usann, så ELLER returnerer fortsatt sann og meldingen lyder «ELLER evaluert til SANN».

Legg til 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-funksjonen If Not bruker den logiske operatoren NOT til å negere resultatet av if-setningsbetingelsen. Den indre betingelsen (0 = 0) er sann, så Not gjør den om til usann, og koden under nøkkelordet «Else» kjøres. Hadde den indre betingelsen vært usann, ville Not ha gjort den sann, og koden over «Else» ville ha kjørt i stedet.

Disse tre knappene tester hver en fast verdi. Reelle forhold leses fra regnearket og blander begge operatorfamiliene.

Hvordan kombinere logisk og sammenligningsbasert Operatorer

En produksjonsmakro tester sjelden et fastkodet tall. Den leser en verdi, sammenligner den og slår sammen flere av disse sammenligningene i én avgjørelse. Makroen nedenfor godkjenner en ordre bare når produktet finnes, mengden er tilstrekkelig og kundekontoen ikke er satt på vent.

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 kombinert betingelse lesbar og korrekt.

  • Parentes hver sammenligning: VBA evaluerer sammenligningsoperatorer før logiske, men parenteser lager gruppenping åpenbare og forhindre en feil når tilstanden senere forverres.
  • Vær oppmerksom på at Og har forrang fremfor Eller: A eller B og C leses som A eller (B og C)Hvis du mente (A eller B) og C, parentesene er obligatoriske.
  • Bruk Ikke på et boolsk tall, ikke på et tall: Ikke på vent leser naturlig. Unngå Ikke 5, fordi Not utfører en bitvis operasjon på tall og returnerer -6 i stedet for False.

⚠️ Advarsel: VBA kortslutter ikke. Hvis (ws er ingenting) eller (ws.Name = "Data"), så, den andre delen kjører fortsatt selv når den første er sann, noe som forårsaker kjøretidsfeil 91. Del slike vakter inn i nestede If-setninger.

XOR, Eqv og Imp Operatorer i VBA

OG, ELLER og IKKE dekker nesten alle hverdagslige betingelser, men VBA tilbyr tre logiske operatorer til som av og til uttrykker en regel mye tydeligere enn et reir av If-setninger.

Operator Returnerer Sann når Eksempel Produksjon
xor Nøyaktig én av de to betingelsene er sann, aldri begge (1 = 1) X eller (5 = 0) ekte
Ekv. Begge betingelsene har samme verdi, enten sanne eller usanne (1 = 1) Ligning (2 = 2) ekte
Imp Den første betingelsen impliserer den andre; bare Sann Imp Falsk er usann (1 = 1) Imp (5 = 0) Falsk

Xor er den mest praktiske av de tre. Den passer til en regel som «en rabatt gjelder for et ansattmedlem eller et lojalitetsmedlem, men ikke for noen som er begge deler». Eqv og Imp forekommer hovedsakelig i eldre kode og i logikkøvelser, så det er viktigere å gjenkjenne dem enn å skrive dem.

Last ned Excel som inneholder koden ovenfor

Spørsmål og svar

Det finnes ingen praktisk grense, men lesbarheten faller raskt forbi tre eller fire. Flytt en lang betingelse inn i en boolsk variabel med et beskrivende navn, og test deretter variabelen i If-setningen i stedet.

Anvendt på et tall, utfører Not en bitvis inversjon i stedet for en logisk. Bruk den bare på en sammenligning eller en boolsk variabel, for eksempel Not (antall > 0), slik at resultatet er Sann eller Usann.

Logikken samsvarer, men syntaksen er forskjellig. En regnearkformel kaller dem som funksjoner, OG(A1>0, B1>0). VBA plasserer dem mellom betingelsene i stedet, som i Hvis A1 > 0 Og B1 > 0 Så.

Ja. Lim inn betingelsen, og en AI-assistent skriver den om med tydeligere parenteser eller deler den opp i navngitte boolske variabler. Verifiser omskrivningen mot en sannhetstabell, fordi en feil forenkling endrer atferd stille.

Ja. Skriv inn uttrykket, og en AI-assistent viser alle inndatakombinasjoner med resultatet, noe som raskt eksponerer en gren som aldri kan nås eller en brakett plassert i feil posisjon.

Oppsummer dette innlegget med: