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.

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

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
