Comparație VBA Operatori: nu sunt egali, Less decât sau Egal cu

⚡ Rezumat inteligent

Comparație VBA OperaOperatorii testează o valoare față de alta și returnează True sau False. Această pagină definește cei șase operatori, îi prezintă în interiorul unei instrucțiuni If, explică modul în care sunt comparate textul și datele și listează greșelile care produc rezultate greșite.

  • 🇧🇷 Scop: Operatorii de comparație validează datele testând o condiție care se evaluează ca Adevărat sau Fals.
  • 🔢 Șase Operators: Egal cu, mai mic decât, mai mare decât, diferit de, mai mic sau egal cu și mai mare sau egal cu.
  • 🔁 Rol dublu: Semnul egal compară în interiorul unei condiții și atribuie o valoare în afara acesteia.
  • 🧪 Instrucțiunea If: Fiecare comparație este plasată în interiorul instrucțiunilor If, ElseIf sau Do While pentru a controla ce cod se execută.
  • 🔤 Text și date: Șirurile de caractere compară caracter cu caracter, iar datele se compară ca numere de serie.
  • ⚠️ Capcană de precizie: Doi Double Valorile care par identice pot eșua la un test de egalitate, așadar comparați o diferență rotunjită.

Comparație VBA Operatori

Comparație VBA Operatori

Aceștia sunt operatori utilizați pentru a compara valori. Operatorii de comparație includ egal cu, mai mic decât, mai mare decât și diferit de.

Operatorii de comparație sunt utilizați pentru a compara valori în scopuri de validare. Să presupunem că sunteți dezvoltatping o aplicație simplă pentru punct de vânzare. În această aplicație, doriți să validați valorile introduse înainte de a le posta. În astfel de cazuri, puteți utiliza operatori de comparație. Acești operatori vor verifica în raport cu numerele negative sau se vor asigura că suma plătită nu depășește suma facturată. Operatorii de comparație sunt utili în astfel de situații.

Fiecare comparație returnează una dintre cele două valori, Adevărat sau Fals, și niciodată un număr. Acest rezultat este ceea ce definește o instrucțiune If.

Următorul tabel listează operatorii de comparație definiți în VBA.

OperaTdR Descriere
= Egal: verifică dacă două valori sunt egale. De asemenea, este folosit ca operator de atribuire
< Less decât: verifică dacă valoarea din stânga este mai mică decât valoarea din dreapta
> Mai mare decât: verifică dacă valoarea din stânga este mai mare decât valoarea din dreapta
<> Nu este egal cu: verifică dacă două valori sunt diferite una de cealaltă
<= Less decât sau egal cu: verifică dacă valoarea din stânga este mai mică sau aceeași cu valoarea din dreapta
>= Mai mare sau egal cu: verifică dacă valoarea din stânga este mai mare sau egală cu valoarea din dreapta

Faptul că fiecare operator este aplicat la două variabile face ca rezultatul returnat să fie mai ușor de prezis.

Comparație VBA Operators cu Exemplu

Următorul tabel arată comparația Excel VBA Operatori cu exemple și rezultate.

S / N OperaTdR Exemplu producție
1 = Dacă x = z Atunci Returnează adevărat dacă sunt egale, altfel returnează false
2 < Dacă x < z Atunci Returnează adevărat dacă x este mai mic decât z, altfel returnează fals
3 > Dacă x > z Atunci Returnează adevărat dacă x este mai mare decât z, altfel returnează fals
4 <> Dacă x <> z Atunci Returnează adevărat dacă nu sunt egale, altfel returnează false
5 <= Dacă x <= z Atunci Returnează adevărat dacă x este mai mic sau egal cu z, altfel returnează fals
6 >= Dacă x >= z, atunci Returnează adevărat dacă x este mai mare sau egal cu z, altfel returnează fals

Exemplu de cod sursă

Comparație egală OperaTdR

If 2 = 1 Then
    MsgBox "True", vbOKOnly, "Equal Operator"
Else
    MsgBox "False", vbOKOnly, "Equal Operator"
End If

AICI,

  • „Dacă 2 = 1 atunci... Altfel... Încheiați dacă” folosește instrucțiunea if pentru a evalua condiția „2 = 1”
  • „MsgBox... " Este o funcție încorporată care afișează o casetă de mesaj.
    • Primul parametru „Adevărat” sau „Fals” este ceea ce va fi afișat în caseta de mesaj. În exemplul nostru, 2 nu este egal cu 1, prin urmare, va afișa „false” în caseta de mesaje.
    • Al doilea parametru „vbOKOnly” este butonul care este afișat în caseta de mesaj
    • Al treilea parametru „Egal Operator” este titlul casetei de mesaje.

Executarea codului de mai sus dă următoarele rezultate

Egal OperaTdR

Acel test singular este cea mai simplă formă. Macrocomenzile reale combină comparații și se ramifică între mai multe rezultate.

Cum se utilizează comparația Operatori într-o instrucțiune If

Un operator de comparație este rareori util de unul singur. Rezultatul său Adevărat sau Fals este introdus într-o structură de decizie, iar instrucțiunea Dacă este cea pe care o veți utiliza cel mai des. Exemplul de mai jos notează un scor păstrat în celula A1 și scrie rezultatul lângă acesta.

Sub GradeScore()
    Dim Score As Long

    Score = Sheet1.Range("A1").Value

    If Score >= 90 Then
        Sheet1.Range("B1").Value = "Distinction"
    ElseIf Score >= 50 Then
        Sheet1.Range("B1").Value = "Pass"
    ElseIf Score < 0 Then
        MsgBox "A score cannot be negative", vbCritical, "Invalid Entry"
    Else
        Sheet1.Range("B1").Value = "Fail"
    End If
End Sub

Macrocomanda citește scorul o dată, apoi îl testează în funcție de trei condiții, în ordine. Patru puncte explică de ce se comportă așa cum se comportă.

  • Ordinea contează: VBA se oprește la prima ramură care returnează True. Plasarea Scor >= 50 înainte Scor >= 90 ar eticheta fiecare scor mare drept o reușită.
  • Altfel este termenul generic: Orice valoare care eșuează la fiecare test anterior trece în Else, deci nicio intrare nu rămâne negestionată.
  • Fără înlănțuire: VBA nu poate citi 0 <= Scor <= 100. Scrie Dacă scorul >= 0 și scorul <= 100, atunci folosind operatori logici in schimb.
  • Același test, alte structuri: Condiția identică determină operatorii Do While și Select Case, astfel încât operatorii se transferă la fiecare buclă pe care o scrieți.

💡 Sfat: Declarați variabila cu un tip numeric, așa cum se arată cu Scor Dim atâta timp câtDacă valoarea rămâne o variantă care conține text, „9” > „10” returnează True deoarece comparația se face caracter cu caracter.

Compararea textului și a datelor în VBA

Numbers compară exact așa cum sugerează aritmetica, dar textul și datele își urmează propriile reguli și ambele îi surprind pe începători.

Șirurile de caractere sunt comparate câte un caracter pe rând, folosind poziția lor de sortare, deci „Mere” < „Banană” returnează True. În mod implicit, comparația este sensibilă la majuscule/minuscule, ceea ce înseamnă „guru99” = „Guru99” returnează False. Plasarea Opțiunea Compara text din partea de sus a modulului ignoră majusculele și minusculele fiecărei comparații de șiruri din modulul respectiv. Pentru un singur test fără a modifica modulul, utilizați StrComp cu argumentul vbTextCompare.

Datele sunt stocate ca numere de serie, numărate începând cu 30 decembrie 1899, astfel încât se compară direct cu aceiași șase operatori. Scrierea Dacă DataScadenței < Dată, atunci detectează corect un element restant, deoarece Date returnează data curentă a sistemului ca același tip de număr de serie. Singura capcană este o dată păstrată ca text: „01/02/2026” citită dintr-un fișier importat este un șir de caractere, nu o dată și se compară alfabetic. Convertiți-o cu CDate înainte de a o testa.

Cunoașterea regulilor pentru fiecare tip elimină majoritatea surprizelor, dar câteva erori îi prind totuși pe dezvoltatorii experimentați.

Greșeli frecvente la compararea valorilor în VBA

Cele cinci probleme de mai jos explică majoritatea comparațiilor care returnează un rezultat neașteptat.

  • Sarcină confundată cu comparația: În afara unei condiții, x = 5 stochează 5 în x. În interiorul If, aceleași simboluri testează egalitatea. VBA nu are un operator == separat, așa că citește cu atenție contextul.
  • Testarea Double valori pentru egalitate exactă: Precizia stocată înseamnă că 0.1 + 0.2 = 0.3 returnează False. Comparați în schimb diferența rotunjită, de exemplu. Dacă Abs(a – b) < 0.000001, atunci.
  • Comparând orice cu Null: Null nu este egal cu nimic, nici măcar cu un alt Null. Testați cu IsNull în loc de = Null.
  • Compararea textului cu un număr: O celulă care conține „100” ca text nu este egală cu numărul 100. Convertiți cu CLng sau CDbl înainte de test.
  • Citirea unui fișier .Text în loc de .Value: Proprietatea .Text returnează ceea ce este afișat, trunchiat în funcție de lățimea coloanei și de formatare. Comparați întotdeauna .Value.

Descărcați fișierul Excel de mai sus Code

Întrebări frecvente

Nu. VBA evaluează prima comparație ca fiind Adevărat sau Fals, apoi compară rezultatul respectiv cu 10, ceea ce dă un răspuns înșelător. Scrieți cele două teste separat și uniți-le cu Și.

Caracteristica „Like” compară un șir de caractere cu un model și nu cu o valoare exactă. Caracterele wildcard includ asteriscul pentru orice caracter și semnul întrebării pentru un caracter, deci „Guru99” Ca „Guru*” returnează Adevărat.

Folosește operatorul Is, ca în If ws Is Nothing Then. Semnul egal compară valori, în timp ce Is verifică dacă două variabile obiect indică același obiect, acesta fiind singurul test valid pentru obiecte.

Da. Descrieți regula în cuvinte simple, cum ar fi semnalizați orice comandă peste 500 plasată înainte de ziua de azi, iar un asistent de inteligență artificială returnează condiția If corespunzătoare. Verificați valorile limită înainte de a avea încredere în ea.

Da. Lipește blocul If și un asistent AI traccare ramură prinde fiecare valoare, apoi indică un ElseIf inaccesibil sau o comparație între text și un număr. Confirmați remedierea pas cu pasping prin intermediul codului.

Rezumați această postare cu: