VBA logic Operators: ȘI, SAU, NU, DACĂ NU în Excel VBA

⚡ Rezumat inteligent

VBA logic OperaOperatorii combină mai multe condiții într-un singur rezultat Adevărat sau Fals. Această pagină explică operatorii AND, OR și NOT cu exemple de butoane de comandă rulabile, un tabel de adevăr complet și operatorii Xor, Eqv și Imp mai puțin cunoscuți.

  • 🔗 Scop: Operatorii logici evaluează mai multe condiții în cadrul unei singure instrucțiuni If.
  • AND Operator: Returnează True numai atunci când fiecare condiție pe care o unește este True.
  • OR Operator: Returnează True când cel puțin una dintre condiții este True.
  • 🔄 NU Operator: Inversează un rezultat, transformând Adevărat în Fals și Fals în Adevărat.
  • 📊 Tabelul Adevărului: O singură grilă de referință afișează rezultatul fiecărui operator pentru fiecare combinație de intrări.
  • 🧮 în plus - Extra Operators: Xor, Eqv și Imp gestionează condiții exclusive, echivalente și implicite.
  • ⚠️ Fără scurtcircuit: VBA evaluează fiecare parte a unei condiții, așa că un test de gardă trebuie să se afle într-un If imbricat.

VBA logic Operatori: ȘI, SAU, NU în Excel VBA

Excel VBA logic Operatori

Să presupunem că doriți să procesați o comandă de client. Pentru asta, doriți să verificați mai întâi dacă produsul comandat există sau nu. Dacă da, doriți să verificați și dacă cantitatea disponibilă este suficientă. Operatorii logici sunt folositori în astfel de cazuri. Operatorii logici sunt utilizați pentru a evalua mai mult de o condiție.

Fiecare condiție în sine este construită din operatorii de comparare și returnează Adevărat sau Fals. Un operator logic combină apoi aceste rezultate într-un singur răspuns final.

Principalii operatori logici Excel VBA ȘI, SAU, NU sunt enumerați în tabelul de mai jos:

S / N OperaTdR Descriere Exemplu producție
1 AND ȘI: Aceasta este folosită pentru a combina mai mult de o condiție. Dacă toate condițiile sunt adevărate, AND se evaluează la adevărat. Dacă oricare dintre condiții este falsă, AND se evaluează ca fals Dacă (1 = 1) și (0 = 1), atunci fals
2 OR SAU: Aceasta este folosită pentru a combina mai mult de o condiție. Dacă oricare dintre condiții este evaluată la adevărat, SAU returnează adevărat. Dacă toate sunt false, SAU returnează false Dacă (1 = 1) sau (5 = 0), atunci adevărat
3 NU NU: Aceasta funcționează ca o funcție inversă. Dacă condiția este adevărată, returnează false, iar dacă o condiție este falsă, returnează adevărat. Dacă nu (0 = 0), atunci fals

Cele trei descrieri de mai sus sunt mai ușor de reținut ca o singură grilă de intrări și rezultate.

Tabel de adevăr pentru VBA logic Operatori

Un tabel de adevăr listează fiecare combinație de intrări și rezultatul returnat de fiecare operator. Citirea o singură dată elimină incertitudinea din orice condiție pe care o scrieți ulterior.

Condiția A Condiția B A și B A sau B Nu A
Adevărat Adevărat Adevărat Adevărat Fals
Adevărat Fals Fals Adevărat Fals
Fals Adevărat Fals Adevărat Adevărat
Fals Fals Fals Fals Adevărat

Două modele merită memorate. AND produce valoarea True doar pe un rând din patru, deci restrânge selecția. OR produce False doar pe un rând, deci lărgește unul. NU ia o singură condiție în loc de două, motiv pentru care are o singură coloană proprie.

VBA logic OperaExemplu de sursă pentru tori Code

De dragul simplității, vom compara numerele codificate greu.

Adăugați butoane ActiveX la foaie din „Opțiune de inserare”.

Setați proprietățile așa cum se arată în imaginea de mai jos

VBA logic Operatori
VBA logic Operatori

Următorul tabel arată proprietățile pe care trebuie să le modificați și valorile pe care trebuie să le actualizați.

S / N Mod de control: Proprietatea Valoare
1 Butonul Command1 Nume btnAND
Legendă AND Operator (1 = 1) și (0 = 0)
2 Butonul Command2 Nume btnOR
Legendă OR Operator (1 = 1) Sau (5 = 0)
3 Butonul Command3 Nume btnNU
Legendă NU Operasau Nu (0 = 0)

Adăugați următorul cod la 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 Dacă AND OperaTdR

  • „Dacă (1 = 1) și (0 = 0) atunci” instrucțiunea if folosește operatorul logic AND pentru a combina două condiții (1 = 1) și (0 = 0). Dacă ambele condiții sunt adevărate, se execută codul de deasupra cuvântului cheie „Else”. Dacă ambele condiții nu sunt adevărate, se execută codul de sub cuvântul cheie „Else”.

Ambele condiții sunt adevărate aici, așadar, dacă se dă clic pe buton, se afișează „ȘI evaluat ca ADEVĂRAT”.

Adăugați următorul cod la 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 Dacă SAU OperaTdR

  • „Dacă (1 = 1) Sau (5 = 0) atunci” Instrucțiunea if folosește operatorul logic SAU pentru a combina două condiții (1 = 1) Sau (5 = 0). Dacă oricare dintre condiții este adevărată, se execută codul de mai sus al cuvântului cheie Else. Dacă ambele condiții sunt false, se execută codul de sub cuvântul cheie Else.

Prima condiție este adevărată, iar a doua este falsă, deci SAU returnează în continuare adevărat, iar mesajul este „SAU evaluat ca ADEVĂRAT”.

Adăugați următorul cod la 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 Dacă NU OperaTdR

  • „Dacă nu (0 = 0) atunci” Funcția VBA If Not folosește operatorul logic NOT pentru a nega rezultatul condiției instrucțiunii if. Condiția internă (0 = 0) este adevărată, așadar Not o transformă în falsă și se execută codul de sub cuvântul cheie „Else”. Dacă condiția internă ar fi fost falsă, Not ar fi făcut-o adevărată și ar fi rulat în schimb codul de deasupra cuvântului cheie „Else”.

Aceste trei butoane testează fiecare o valoare fixă. Condițiile reale sunt citite din foaia de lucru și combină ambele familii de operatori.

Cum să combini logica și comparația Operatori

O macrocomandă de producție testează rareori un număr codificat fix. Citește o valoare, o compară și unește mai multe dintre aceste comparații într-o singură decizie. Macrocomanda de mai jos aprobă o comandă numai atunci când produsul există, cantitatea este suficientă și contul clientului nu este în așteptare.

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

Trei reguli mențin o condiție combinată lizibilă și corectă.

  • Puneți fiecare comparație între paranteze: VBA evaluează operatorii de comparație înaintea celor logici, dar parantezele fac grupulping evident și pentru a preveni o greșeală atunci când afecțiunea se agravează ulterior.
  • Rețineți precedența lui Și față de Sau: A sau B și C se citește ca A sau (B și C)Dacă ai vrut să spui (A sau B) și C, parantezele sunt obligatorii.
  • Se aplică nu unui boolean, nu unui număr: Nu este în așteptare se citește natural. Evitați Nu 5, deoarece Not efectuează o operație bit la bit asupra numerelor și returnează -6 în loc de False.

⚠️ Atenție: VBA nu scurtcircuitează. În Dacă (ws nu este nimic) sau (ws.Name = „Date”), atunci, a doua parte rulează chiar și atunci când prima este adevărată, ceea ce generează eroarea de execuție 91. Împărțiți aceste guarde în instrucțiuni If imbricate.

Xor, Eqv și Imp Operatori în VBA

Operațiile ȘI, SAU și NU acoperă aproape fiecare condiție de zi cu zi, dar VBA oferă încă trei operatori logici care exprimă ocazional o regulă mult mai clar decât un cuib de instrucțiuni If.

OperaTdR Returnează True când Exemplu producție
xor Exact una dintre cele două condiții este adevărată, niciodată ambele (1 = 1) Xor (5 = 0) Adevărat
Eqv Ambele condiții au aceeași valoare, ambele adevărate sau ambele false (1 = 1) Ecv. (2 = 2) Adevărat
drăcușor Prima condiție o implică pe a doua; doar Adevărat Imp Fals este fals. (1 = 1) Imp (5 = 0) Fals

XOR este cea mai practică dintre cele trei. Se potrivește unei reguli precum „o reducere se aplică unui membru al personalului sau unui membru al programului de fidelitate, dar nu cuiva care este ambele”. Eqv și Imp apar în principal în codul mai vechi și în exercițiile de logică, așa că recunoașterea lor contează mai mult decât scrierea lor.

Descărcați Excel care conține codul de mai sus

Întrebări frecvente

Nu există o limită practică, dar lizibilitatea scade rapid după trei sau patru. Mutați o condiție lungă într-o variabilă booleană cu un nume descriptiv, apoi testați acea variabilă în instrucțiunea If.

Aplicată unui număr, funcția Not efectuează o inversiune pe biți, nu una logică. Se aplică doar unei comparații sau unei variabile booleene, cum ar fi Not (Cantitate > 0), astfel încât rezultatul să fie Adevărat sau Fals.

Logica se potrivește, dar sintaxa diferă. O formulă din foaia de calcul le apelează ca funcții, AND(A1>0, B1>0). VBA le plasează între condiții, ca în If A1 > 0 And B1 > 0 Then.

Da. Inserează condiția și un asistent de inteligență artificială o rescrie cu paranteze mai clare sau o împarte în variabile booleene denumite. Verifică rescrierea în raport cu un tabel de adevăr, deoarece o simplificare greșită modifică comportamentul în tăcere.

Da. Furnizați expresia, iar un asistent AI listează fiecare combinație de intrări cu rezultatul său, ceea ce expune rapid o ramură care nu poate fi niciodată atinsă sau o paranteză plasată în poziția greșită.

Rezumați această postare cu: