VBA logiskt Operators: OCH, ELLER, INTE, OM INTE i Excel VBA

โšก Smart sammanfattning

VBA logiskt Operatorer kombinerar flera villkor till ett enda Sant eller Falskt resultat. Den hรคr sidan fรถrklarar OCH, ELLER och INTE med exempel pรฅ kรถrbara kommandoknappar, en fullstรคndig sanningstabell och de mindre kรคnda operatorerna XOR, Eqv och Imp.

  • ๐Ÿ”— Syfte: Logiska operatorer utvรคrderar mer รคn ett villkor i en och samma If-sats.
  • โœ… AND Operator: Returnerar Sant endast nรคr varje villkor den kopplar till รคr Sant.
  • โž• OR Operator: Returnerar Sant nรคr minst ett av villkoren รคr Sant.
  • ๐Ÿ”„ INTE Operator: Inverterar ett resultat och fรถrvandlar Sant till Falskt och Falskt till Sant.
  • ๐Ÿ“Š Sanningstabell: Ett enda referensrutnรคt visar resultatet av varje operator fรถr varje inmatningskombination.
  • ๐Ÿงฎ extra Operators: Xor, Eqv och Imp hanterar exklusiva, ekvivalenta och implicita villkor.
  • โš ๏ธ Ingen kortslutning: VBA utvรคrderar varje del av ett villkor, sรฅ ett guard-test mรฅste sitta i en kapslad If-funktion.

VBA logiskt Operatorer: OCH, ELLER, INTE i Excel VBA

Excel VBA Logisk Operatorer

Lรฅt oss sรคga att du vill behandla en kundorder. Fรถr det vill du fรถrst kontrollera om den bestรคllda produkten finns eller inte. Om den gรถr det vill du ocksรฅ kontrollera om mรคngden som finns till hands rรคcker. Logiska operatorer kommer vรคl till pass i sรฅdana fall. Logiska operatorer anvรคnds fรถr att utvรคrdera mer รคn ett villkor.

Varje villkor i sig รคr uppbyggt av jรคmfรถrelseoperatรถrer och returnerar Sant eller Falskt. En logisk operator kombinerar sedan dessa resultat till ett slutgiltigt svar.

De huvudsakliga logiska Excel VBA-operatorerna OCH, ELLER, NOT listas i tabellen nedan:

S / N Operator BESKRIVNING Exempelvis Produktion
1 AND OCH: Detta anvรคnds fรถr att kombinera mer รคn ett villkor. Om alla villkor รคr sanna, OCH utvรคrderas till sanna. Om nรฅgot av villkoren รคr falskt, AND utvรคrderas till falskt Om (1 = 1) och (0 = 1) dรฅ falsk
2 OR ELLER: Detta anvรคnds fรถr att kombinera mer รคn ett villkor. Om nรฅgot av villkoren utvรคrderas till sant, returnerar OR sant. Om alla รคr falska returnerar OR falskt Om (1 = 1) eller (5 = 0) dรฅ sann
3 INTE NOT: Den hรคr fungerar som en omvรคnd funktion. Om villkoret รคr sant returnerar det falskt, och om ett villkor รคr falskt returnerar det sant. Om inte (0 = 0) dรฅ falsk

De tre beskrivningarna ovan รคr enklare att hรฅlla i รฅtanke som ett enda rutnรคt av indata och resultat.

Sanningstabell fรถr VBA Logical Operatorer

En sanningstabell listar alla kombinationer av indata och resultatet som varje operator returnerar. Att lรคsa den en gรฅng eliminerar gissningsleken frรฅn alla villkor du senare skriver.

Villkor A Villkor B A och B A eller B Inte A
Sant Sant Sant Sant Falsk
Sant Falsk Falsk Sant Falsk
Falsk Sant Falsk Sant Sant
Falsk Falsk Falsk Falsk Sant

Tvรฅ mรถnster รคr vรคrda att memorera. AND producerar True pรฅ endast en rad av fyra, sรฅ det begrรคnsar ett urval. OR producerar Falskt pรฅ endast en rad, sรฅ den breddar en. INTE tar ett enda villkor istรคllet fรถr tvรฅ, vilket รคr anledningen till att den har en egen kolumn.

VBA logiskt Operators Exempelkรคlla Code

Fรถr enkelhetens skull kommer vi att jรคmfรถra hรฅrdkodade nummer.

Lรคgg till ActiveX-knappar pรฅ arket frรฅn alternativet Infoga.

Stรคll in egenskaperna som visas i bilden nedan

VBA logiskt Operatorer
VBA logiskt Operatorer

Fรถljande tabell visar egenskaperna som du behรถver รคndra och de vรคrden som du ocksรฅ behรถver uppdatera.

S / N kontroll Fast egendom Vรคrderar
1 Kommandoknapp1 Namn btnAND
Bildtext AND Operator (1 = 1) och (0 = 0)
2 Kommandoknapp2 Namn btnOR
Bildtext OR Operator (1 = 1) Eller (5 = 0)
3 Kommandoknapp3 Namn btn INTE
Bildtext INTE Operaeller Inte (0 = 0)

Lรคgg till fรถljande kod 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 Om OCH Operator

  • "Om (1 = 1) Och (0 = 0) Dรฅ" if-satsen anvรคnder den logiska operatorn AND fรถr att kombinera tvรฅ villkor (1 = 1) och (0 = 0). Om bรฅda villkoren รคr sanna exekveras koden ovanfรถr nyckelordet 'Else'. Om bรฅda villkoren inte รคr sanna exekveras koden under nyckelordet 'Else'.

Bรฅda villkoren รคr sanna hรคr, sรฅ om du klickar pรฅ knappen visas "OCH utvรคrderat till SANT".

Lรคgg till fรถljande kod till 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 Om ELLER Operator

  • "Om (1 = 1) Eller (5 = 0) Dรฅ" if-satsen anvรคnder den logiska operatorn OR fรถr att kombinera tvรฅ villkor (1 = 1) eller (5 = 0). Om nรฅgot av villkoren รคr sant kรถrs koden ovanfรถr nyckelordet Else. Om bรฅda villkoren รคr falska kรถrs koden under nyckelordet Else.

Det fรถrsta villkoret รคr sant och det andra รคr falskt, sรฅ ELLER returnerar fortfarande sant och meddelandet lyder "ELLER utvรคrderat till SANT".

Lรคgg till fรถljande kod till 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 om INTE Operator

  • "Om inte (0 = 0) dรฅ" VBA-funktionen If Not anvรคnder den logiska operatorn NOT fรถr att negera resultatet av if-satsens villkor. Det inre villkoret (0 = 0) รคr sant, sรฅ Not gรถr det till falskt och koden under nyckelordet 'Else' kรถrs. Om det inre villkoret hade varit falskt skulle Not ha gjort det sant och koden ovanfรถr 'Else' skulle ha kรถrts istรคllet.

Dessa tre knappar testar var och en ett fast vรคrde. Verkliga fรถrhรฅllanden lรคses frรฅn kalkylbladet och blandar bรฅda operatorfamiljerna.

Hur man kombinerar logik och jรคmfรถrelse Operatorer

Ett produktionsmakro testar sรคllan ett fastlagt tal. Det lรคser ett vรคrde, jรคmfรถr det och sammanfogar flera av dessa jรคmfรถrelser till ett enda beslut. Makrot nedan godkรคnner en order endast nรคr produkten finns, kvantiteten รคr tillrรคcklig och kundkontot inte รคr spรคrrat.

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 hรฅller ett kombinerat villkor lรคsbart och korrekt.

  • Parentes varje jรคmfรถrelse: VBA utvรคrderar jรคmfรถrelseoperatorer fรถre logiska, men parenteser bildar gruppenping uppenbara och fรถrhindra ett misstag nรคr tillstรฅndet senare fรถrvรคrras.
  • Tรคnk pรฅ att Och har fรถretrรคde framfรถr Eller: A eller B och C lรคses som A Eller (B Och C)Om du menade (A eller B) och C, parenteserna รคr obligatoriska.
  • Tillรคmpa Inte pรฅ ett booleskt tal, inte pรฅ ett tal: Inte i vรคntelรคge lรคser naturligt. Undvik Inte 5, eftersom Not utfรถr en bitvis operation pรฅ tal och returnerar -6 istรคllet fรถr False.

โš ๏ธ Varning: VBA kortsluter inte. Om (ws รคr ingenting) eller (ws.Name = "Data") dรฅ, den andra delen kรถrs fortfarande รคven nรคr den fรถrsta รคr sann, vilket orsakar kรถrtidsfel 91. Dela upp sรฅdana skydd i kapslade If-satser.

XOR, Eqv och Imp Operatorer i VBA

OCH, ELLER och INTE tรคcker nรคstan alla vardagliga villkor, men VBA tillhandahรฅller ytterligare tre logiska operatorer som ibland uttrycker en regel mycket tydligare รคn ett bo av If-satser.

Operator Returnerar Sant nรคr Exempelvis Produktion
Xor Exakt ett av de tvรฅ villkoren รคr sant, aldrig bรฅda (1 = 1) X eller (5 = 0) Sant
ekv Bรฅda villkoren har samma vรคrde, bรฅda sanna eller bรฅda falska (1 = 1) Ekv. (2 = 2) Sant
Imp Det fรถrsta villkoret antyder det andra; endast Sant Imp Falskt รคr falskt (1 = 1) Imp (5 = 0) Falsk

Xor รคr den mest praktiska av de tre. Den passar en regel som "en rabatt gรคller en anstรคlld eller en lojalitetsmedlem, men inte nรฅgon som รคr bรฅda". Ekv. och Imp fรถrekommer frรคmst i รคldre kod och i logikรถvningar, sรฅ det รคr viktigare att kรคnna igen dem รคn att skriva dem.

Ladda ner Excel som innehรฅller ovanstรฅende kod

Vanliga frรฅgor

Det finns ingen praktisk grรคns, men lรคsbarheten sjunker snabbt efter tre eller fyra. Flytta ett lรฅngt villkor till en boolesk variabel med ett beskrivande namn och testa sedan variabeln i If-satsen istรคllet.

Tillรคmpat pรฅ ett tal utfรถr Not en bitvis inversion snarare รคn en logisk. Tillรคmpar den endast pรฅ en jรคmfรถrelse eller en boolesk variabel, till exempel Not (Qty > 0), sรฅ resultatet รคr Sant eller Falskt.

Logiken matchar, men syntaxen skiljer sig. En kalkylbladsformel anropar dem som funktioner, OCH(A1>0, B1>0). VBA placerar dem mellan villkoren istรคllet, som i Om A1 > 0 Och B1 > 0 Dรฅ.

Ja. Klistra in villkoret och en AI-assistent skriver om det med tydligare parenteser eller delar upp det i namngivna booleska variabler. Verifiera omskrivningen mot en sanningstabell, eftersom en felaktig fรถrenkling รคndrar beteendet tyst.

Ja. Ange uttrycket sรฅ listar en AI-assistent varje inmatningskombination med dess resultat, vilket snabbt exponerar en gren som aldrig kan nรฅs eller en hakparentes placerad pรฅ fel position.

Sammanfatta detta inlรคgg med: