Srovnání VBA Operators: Nerovná se, Less než nebo Rovná se

⚡ Chytré shrnutí

Srovnání VBA OperaOperatory porovnávají jednu hodnotu s jinou a vracejí hodnotu True nebo False. Tato stránka definuje šest operátorů, ukazuje je uvnitř příkazu If, vysvětluje, jak se porovnává text a data, a uvádí chyby, které vedou k nesprávným výsledkům.

  • 🇧🇷 Účel: Porovnávací operátory ověřují data testováním podmínky, která se vyhodnotí jako Pravda nebo Nepravda.
  • 🔢 Šest Operators: Rovné, menší než, větší než, nerovná se, menší nebo rovno a větší nebo rovno.
  • 🔁 Dvojrole: Znaménko rovnosti porovnává uvnitř podmínky a přiřazuje hodnotu mimo jedničku.
  • 🧪 Příkaz If: Každé porovnání je umístěno uvnitř metod If, ElseIf nebo Do While, aby se určilo, který kód se spustí.
  • 🔤 Text a data: Řetězce porovnávají znak po znaku a data porovnávají jako pořadová čísla.
  • ⚠️ Přesná past: Dvě Double Hodnoty, které vypadají identicky, nemusí projít testem rovnosti, proto porovnávejte zaokrouhlený rozdíl.

Srovnání VBA Operatorů

Srovnání VBA Operatorů

Toto jsou operátory, které se používají k porovnávání hodnot. Mezi porovnávací operátory patří rovno, menší než, větší než a nerovná se.

Porovnávací operátory se používají k porovnání hodnot pro účely validace. Řekněme, že vyvíjíteping jednoduchá aplikace pro pokladní místo. V této aplikaci chcete ověřit zadané hodnoty před zaúčtováním. V takových případech můžete použít porovnávací operátory. Tento operátor porovná záporná čísla nebo zajistí, aby zaplacená částka nepřesáhla fakturovanou částku. V takových situacích se hodí porovnávací operátory.

Každé porovnání vrací jednu ze dvou hodnot, True nebo False, a nikdy ne číslo. S tímto výsledkem se příkaz If vypořádává.

Následující tabulka uvádí porovnávací operátory definované v VBA.

OperaTor Description
= Rovné: kontroluje, zda jsou dvě hodnoty stejné. Používá se také jako operátor přiřazení
< Less než: kontroluje, zda je hodnota vlevo menší než hodnota vpravo
> Větší než: zkontroluje, zda je hodnota vlevo větší než hodnota vpravo.
<> Nerovná se: kontroluje, zda se dvě hodnoty liší.
<= Less než nebo rovno: kontroluje, zda je hodnota vlevo menší nebo stejná jako hodnota vpravo
>= Větší nebo rovno: kontroluje, zda je hodnota vlevo větší nebo stejná jako hodnota vpravo.

Vidění každého operátoru aplikovaného na dvě proměnné usnadňuje předvídání vráceného výsledku.

Srovnání VBA Operatorů s Příkladem

Následující tabulka ukazuje srovnání Excel VBA Operatory s příklady a výstupy.

S / N OperaTor Příklad Výstup
1 = Jestliže x = z Pak Vrátí true, pokud jsou stejné, jinak vrátí false
2 < Jestliže x < z Pak Vrátí hodnotu true, pokud je x menší než z, jinak vrátí hodnotu false
3 > Pokud x > z Pak Vrátí hodnotu true, pokud je x větší než z, jinak vrátí hodnotu false
4 <> Pokud x <> z Potom Vrátí hodnotu true, pokud se nerovnají, jinak vrátí hodnotu false
5 <= Jestliže x <= z Potom Vrátí hodnotu true, pokud je x menší nebo rovno z, jinak vrátí hodnotu false
6 >= Pokud x >= z, pak Vrátí hodnotu true, pokud je x větší nebo rovno z, jinak vrátí hodnotu false

Příklad zdrojového kódu

Rovné srovnání OperaTor

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

TADY,

  • „Pokud 2 = 1, pak… jinak… Konec, když“ používá příkaz if k vyhodnocení podmínky „2 = 1“
  • "MsgBox... " Je vestavěná funkce, která zobrazuje okno se zprávou.
    • První parametr „True“ nebo „False“ je to, co se zobrazí v okně zprávy. V našem příkladu se 2 nerovná 1, proto se v poli msg zobrazí „false“.
    • Druhý parametr „vbOKOnly“ je tlačítko, které se zobrazí v okně zprávy
    • Třetí parametr „Equal Operator“ je název pole se zprávou.

Provedení výše uvedeného kódu poskytuje následující výsledky

Rovnat se OperaTor

Tento jediný test je nejjednodušší formou. Skutečná makra kombinují porovnání a větví se mezi několika výsledky.

Jak používat srovnání Operatorů v příkazu If

Porovnávací operátor je sám o sobě zřídka užitečný. Jeho výsledek True nebo False je předáván rozhodovací struktuře a příkaz If budete používat nejčastěji. Následující příklad ohodnotí skóre uložené v buňce A1 a výsledek zapíše vedle něj.

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

Makro jednou přečte skóre a poté ho postupně otestuje na tři podmínky. Čtyři body vysvětlují, proč se chová tak, jak se chová.

  • Záleží na pořadí: VBA se zastaví na první větvi, která vrátí hodnotu True. Skóre >= 50 před Skóre >= 90 by označil každé vysoké skóre za úspěšné.
  • Jinak je to univerzální: Jakákoli hodnota, která neprojde žádným předchozím testem, se přepíše na Else, takže žádný vstup nezůstane neošetřený.
  • Žádné řetězení: VBA neumí číst 0 <= Skóre <= 100Napište Pokud Skóre >= 0 a Skóre <= 100, pak s použitím logických operátorů namísto.
  • Stejný test, jiné struktury: Identická podmínka řídí operace Do While a Select Case, takže operátory se přenášejí do každé smyčky, kterou napíšete.

💡 Tip: Deklarujte proměnnou s číselným typem, jak je znázorněno na příkladu Dim Score tak dlouhoPokud hodnota zůstane variantou obsahující text, „9“ > „10“ vrací True, protože porovnání se provádí znak po znaku.

Porovnání textu a data ve VBA

Numbers porovnávejte přesně tak, jak naznačuje aritmetika, ale text a data se řídí vlastními pravidly a obojí překvapuje začátečníky.

Řetězce se porovnávají znak po znaku s použitím jejich pozice řazení, takže „Apple“ < „Banana“ vrací True. Ve výchozím nastavení se při porovnávání rozlišují velká a malá písmena, což znamená, že „guru99“ = „Guru99“ vrací False. Umístění Možnost Porovnat text v horní části modulu způsobí, že každé porovnání řetězců v daném modulu ignoruje případová inicializace. Pro jeden test bez změny modulu použijte StrComp s argumentem vbTextCompare.

Data jsou uložena jako pořadová čísla počítaná od 30. prosince 1899, takže se porovnávají přímo se stejnými šesti operátory. Pokud Datum_splatnosti < Datum, pak Funkce Date správně detekuje položku po splatnosti, protože Date vrací aktuální systémové datum ve stejném druhu sériového čísla. Jedinou chybou je datum uložené jako text: „01/02/2026“ přečtené z importovaného souboru je řetězec, nikoli datum, a porovnává se abecedně. Před testováním jej převeďte pomocí CDate.

Znalost pravidel pro každý typ odstraňuje většinu překvapení, ale několik chyb stále zaskočí zkušené vývojáře.

Časté chyby při porovnávání hodnot ve VBA

Níže uvedených pět problémů vysvětluje většinu porovnání, která vracejí neočekávaný výsledek.

  • Úkol zaměněn za porovnání: Mimo podmínku, x = 5 ukládá 5 do x. Uvnitř operátoru If stejné symboly testují rovnost. VBA nemá samostatný operátor ==, proto si pečlivě přečtěte kontext.
  • Testování Double hodnoty pro přesnou rovnost: Uložená přesnost znamená, že 0.1 + 0.2 = 0.3 vrátí hodnotu False. Porovnejte místo toho zaokrouhlený rozdíl, například Pokud Abs(a – b) < 0.000001, pak.
  • Porovnání čehokoli s Null: Null se nerovná ničemu, ani jinému Null. Otestujte s IsNull místo = Nula.
  • Porovnání textu s číslem: Buňka obsahující text „100“ se nerovná číslu 100. Před testem proveďte konverzi pomocí příkazu CLng nebo CDbl.
  • Čtení .Text místo .Value: Vlastnost .Text vrací zobrazený obsah, který je zkrácen o šířku sloupce a formátování. Vždy porovnávejte .Value.

Stáhněte si výše uvedený Excel Code

Nejčastější dotazy

Ne. VBA vyhodnotí první porovnání na True nebo False a poté tento výsledek porovná s 10, což dává zavádějící odpověď. Napište oba testy odděleně a spojte je operátorem And.

Funkce Like porovnává řetězec se vzorem, nikoli s přesnou hodnotou. Zástupné znaky zahrnují hvězdičku pro libovolné znaky a otazník pro jeden znak, takže „Guru99“ Jako „Guru*” vrací True.

Použijte operátor Is, jako v případě If ws Is Nothing Then. Znaménko rovnosti porovnává hodnoty, zatímco Is kontroluje, zda dvě objektové proměnné ukazují na stejný objekt, což je jediný platný test pro objekty.

Ano. Popište pravidlo jednoduchými slovy, například označte jakoukoli objednávku nad 500 zadanou před dneškem a asistent s umělou inteligencí vrátí odpovídající podmínku If. Předtím, než mu budete důvěřovat, zkontrolujte hraniční hodnoty.

Ano. Vložte blok If a asistenta s umělou inteligencí. traces, která větev zachytí každou hodnotu a poté upozorní na nedosažitelný ElseIf nebo na porovnání mezi textem a číslem. Potvrďte opravu krok za krokem.ping prostřednictvím kódu.

Shrňte tento příspěvek takto: