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.

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

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
