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.

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

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
