VBA Logical Operators: AND, OR, NOT, IF NOT v Excel VBA

โšก Chytrรฉ shrnutรญ

VBA Logical OperaOperatory kombinujรญ nฤ›kolik podmรญnek do jednoho vรฝsledku Pravda nebo Nepravda. Tato strรกnka vysvฤ›tluje operace AND, OR a NOT s pล™รญklady spustitelnรฉ pล™รญkazovรฉ tlaฤรญtka, รบplnou pravdivostnรญ tabulkou a mรฉnฤ› znรกmรฝmi operรกtory Xor, Eqv a Imp.

  • ๐Ÿ”— รšฤel: Logickรฉ operรกtory vyhodnocujรญ vรญce neลพ jednu podmรญnku v rรกmci jednoho pล™รญkazu If.
  • (Tj. A AUTOMATIZACI Operator: Vracรญ hodnotu True pouze tehdy, kdyลพ jsou vลกechny podmรญnky, ke kterรฝm se pล™ipojuje, True.
  • โž• OR Operator: Vracรญ hodnotu True, pokud je alespoลˆ jedna z podmรญnek True.
  • ๐Ÿ”„ NENร Operator: Invertuje vรฝsledek, pล™emฤ›nรญ True na False a False na True.
  • ๐Ÿ“Š Pravdivรก tabulka: Jedna referenฤnรญ mล™รญลพka zobrazuje vรฝsledek kaลพdรฉho operรกtoru pro kaลพdou vstupnรญ kombinaci.
  • ๐Ÿงฎ extra Operators: Funkce Xor, Eqv a Imp zpracovรกvajรญ exkluzivnรญ, ekvivalentnรญ a implicitnรญ podmรญnky.
  • โš ๏ธ Bez zkratu: VBA vyhodnocuje kaลพdou ฤรกst podmรญnky, takลพe ochrannรฝ test musรญ bรฝt umรญstฤ›n ve vnoล™enรฉm If.

VBA Logical OperaOperace: A, NEBO, NOT v Excelu VBA

Excel VBA Logical Operatorลฏ

ล˜eknฤ›me, ลพe chcete zpracovat objednรกvku zรกkaznรญka. Chcete-li to provรฉst, musรญte nejprve zkontrolovat, zda objednanรฝ produkt existuje nebo ne. Pokud ano, mฤ›li byste takรฉ zkontrolovat, zda je mnoลพstvรญ po ruce dostateฤnรฉ. V takovรฝch pล™รญpadech se hodรญ logickรฉ operรกtory. Logickรฉ operรกtory se pouลพรญvajรญ k vyhodnocenรญ vรญce neลพ jednรฉ podmรญnky.

Kaลพdรก podmรญnka sama o sobฤ› je postavena z porovnรกvacรญ operรกtory a vracรญ True nebo False. Logickรฝ operรกtor pak tyto vรฝsledky zkombinuje do jednรฉ koneฤnรฉ odpovฤ›di.

Hlavnรญ logickรฉ operรกtory Excel VBA AND, OR, NOT jsou uvedeny v tabulce nรญลพe:

S / N OperaTor Description Pล™รญklad Vรฝstup
1 A AUTOMATIZACI AND: Pouลพรญvรก se ke spojenรญ vรญce neลพ jednรฉ podmรญnky. Pokud jsou vลกechny podmรญnky pravdivรฉ, AND se vyhodnotรญ jako pravdivรฉ. Pokud je nฤ›kterรก z podmรญnek nepravdivรก, AND se vyhodnotรญ jako nepravda Pokud (1 = 1) a (0 = 1), pak nepravdivรฝ
2 OR NEBO: Pouลพรญvรก se ke kombinaci vรญce neลพ jednรฉ podmรญnky. Pokud se nฤ›kterรก z podmรญnek vyhodnotรญ jako pravdivรก, OR vrรกtรญ hodnotu true. Pokud jsou vลกechny nepravdivรฉ, OR vrรกtรญ false Pokud (1 = 1) nebo (5 = 0), pak pravdivรฝ
3 NENร NE: Toto funguje jako inverznรญ funkce. Pokud je podmรญnka pravdivรก, vrรกtรญ hodnotu false, a pokud je podmรญnka nepravdivรก, vrรกtรญ hodnotu true. Pokud ne (0 = 0), pak nepravdivรฝ

Tล™i vรฝลกe uvedenรฉ popisy se snรกze zapamatujรญ jako jedna mล™รญลพka vstupลฏ a vรฝsledkลฏ.

Pravdivostnรญ tabulka pro logickรฉ operace VBA Operatorลฏ

Pravdivostnรญ tabulka uvรกdรญ vลกechny kombinace vstupลฏ a vรฝsledek, kterรฝ kaลพdรฝ operรกtor vracรญ. Jedno pล™eฤtenรญ odstranรญ nutnost dohadลฏ z jakรฉkoli podmรญnky, kterou pozdฤ›ji zapรญลกete.

Podmรญnka A Podmรญnka B A a B A nebo B Ne A
Pravdivรฝ Pravdivรฝ Pravdivรฝ Pravdivรฝ Faleลกnรฝ
Pravdivรฝ Faleลกnรฝ Faleลกnรฝ Pravdivรฝ Faleลกnรฝ
Faleลกnรฝ Pravdivรฝ Faleลกnรฝ Pravdivรฝ Pravdivรฝ
Faleลกnรฝ Faleลกnรฝ Faleลกnรฝ Faleลกnรฝ Pravdivรฝ

Stojรญ za to si zapamatovat dva vzorce. A AUTOMATIZACI Vrรกtรญ hodnotu True pouze na jednom ล™รกdku ze ฤtyล™, takลพe vรฝbฤ›r zรบลพรญ. OR Vygeneruje hodnotu False pouze na jednom ล™รกdku, takลพe jeden ล™รกdek rozลกรญล™รญ. NENร bere jednu podmรญnku mรญsto dvou, a proto mรก jeden vlastnรญ sloupec.

VBA Logical OperaPล™รญklad zdroje Code

Pro jednoduchost budeme porovnรกvat pevnฤ› zakรณdovanรก ฤรญsla.

Pล™idejte tlaฤรญtka ActiveX na list z moลพnosti โ€žVloลพitโ€œ.

Nastavte vlastnosti, jak je znรกzornฤ›no na obrรกzku nรญลพe

VBA Logical Operatorลฏ
VBA Logical Operatorลฏ

V nรกsledujรญcรญ tabulce jsou uvedeny vlastnosti, kterรฉ je tล™eba zmฤ›nit, a hodnoty, kterรฉ je takรฉ tล™eba aktualizovat.

S / N ovlรกdรกnรญ Vlastnictvรญ Hodnota
1 CommandButton 1 Jmรฉno btnAND
Titulek A AUTOMATIZACI Operator (1 = 1) a (0 = 0)
2 CommandButton 2 Jmรฉno btnOR
Titulek OR Operator (1 = 1) Nebo (5 = 0)
3 CommandButton 3 Jmรฉno btnNE
Titulek NENร Operator ne (0 = 0)

Pล™idejte nรกsledujรญcรญ kรณd do 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 Pokud AND OperaTor

  • โ€žPokud (1 = 1) a (0 = 0), takโ€œ pล™รญkaz if pouลพรญvรก logickรฝ operรกtor AND ke kombinaci dvou podmรญnek (1 = 1) A (0 = 0). Pokud jsou splnฤ›ny obฤ› podmรญnky, provede se kรณd nad klรญฤovรฝm slovem โ€žElseโ€œ. Pokud nejsou splnฤ›ny obฤ› podmรญnky, provede se kรณd pod klรญฤovรฝm slovem 'Else'.

Obฤ› podmรญnky jsou zde pravdivรฉ, takลพe po kliknutรญ na tlaฤรญtko se zobrazรญ โ€žA vyhodnoceno jako PRAVDAโ€œ.

Pล™idejte nรกsledujรญcรญ kรณd do 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 Pokud OR OperaTor

  • โ€žPokud (1 = 1) Nebo (5 = 0), takโ€œ Pล™รญkaz if pouลพรญvรก logickรฝ operรกtor OR ke spojenรญ dvou podmรญnek (1 = 1) nebo (5 = 0). Pokud je nฤ›kterรก z podmรญnek pravdivรก, provede se kรณd uvedenรฝ vรฝลกe za klรญฤovรฝm slovem Else. Pokud jsou obฤ› podmรญnky nepravdivรฉ, provede se kรณd uvedenรฝ nรญลพe za klรญฤovรฝm slovem Else.

Prvnรญ podmรญnka je pravdivรก a druhรก nepravdivรก, takลพe OR stรกle vracรญ true a zprรกva znรญ โ€žOR vyhodnoceno jako TRUEโ€œ.

Pล™idejte nรกsledujรญcรญ kรณd do 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 Pokud NE OperaTor

  • โ€žPokud ne (0 = 0), takโ€œ Funkce VBA If Not pouลพรญvรก logickรฝ operรกtor NOT k negaci vรฝsledku podmรญnky pล™รญkazu if. Vnitล™nรญ podmรญnka (0 = 0) je pravdivรก, takลพe Not ji pล™evede na nepravdivou a provede se kรณd pod klรญฤovรฝm slovem 'Else'. Pokud by vnitล™nรญ podmรญnka byla nepravdivรก, Not by ji pล™evedl na nepravdivou a spustil by se kรณd nad klรญฤovรฝm slovem 'Else'.

Tato tล™i tlaฤรญtka testujรญ pevnou hodnotu. Reรกlnรฉ podmรญnky se ฤtou z pracovnรญho listu a kombinujรญ obฤ› rodiny operรกtorลฏ.

Jak kombinovat logickรฉ a srovnรกvacรญ vรฝpoฤty Operatorลฏ

Produkฤnรญ makro jen zล™รญdka testuje pevnฤ› zakรณdovanรฉ ฤรญslo. Pล™eฤte hodnotu, porovnรก ji a spojรญ nฤ›kolik tฤ›chto porovnรกnรญ do jednoho rozhodnutรญ. Nรญลพe uvedenรฉ makro schvรกlรญ objednรกvku pouze tehdy, kdyลพ produkt existuje, mnoลพstvรญ je dostateฤnรฉ a zรกkaznickรฝ รบฤet nenรญ pozastaven.

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

Tล™i pravidla udrลพujรญ kombinovanou podmรญnku ฤitelnou a sprรกvnou.

  • Zaลกkrtnฤ›te kaลพdรฉ srovnรกnรญ: VBA vyhodnocuje porovnรกvacรญ operรกtory pล™ed logickรฝmi, ale zรกvorky dฤ›lajรญ skupinuping zล™ejmรฉ a zabrรกnit chybฤ›, kdyลพ se stav pozdฤ›ji zhorลกรญ.
  • Dbejte na prioritu operace And pล™ed operacรญ Or: A Nebo B A C se ฤte jako A Nebo (B a C)Pokud jsi myslel/a (A nebo B) a C, zรกvorky jsou povinnรฉ.
  • Aplikuje se Ne na booleovskou hodnotu, ne na ฤรญslo: Nenรญ pozastaveno ฤte se pล™irozenฤ›. Vyhnฤ›te se Ne 5, protoลพe Not provรกdรญ bitovรฉ operace s ฤรญsly a vracรญ -6 mรญsto False.

Warning๏ธ Varovรกnรญ: VBA nezkratuje. V Pokud (ws nenรญ nic) nebo (ws.Name = โ€žDataโ€œ) pak, druhรก ฤรกst stรกle bฤ›ลพรญ, i kdyลพ je prvnรญ pravdivรก, coลพ vyvolรก chybu za bฤ›hu 91. Rozdฤ›lte takovรฉ ochrannรฉ prvky do vnoล™enรฝch pล™รญkazลฏ If.

Xor, Eqv a Imp Operatorลฏ ve VBA

Operatory AND, OR a NOT pokrรฝvajรญ tรฉmฤ›ล™ kaลพdou kaลพdodennรญ podmรญnku, ale VBA nabรญzรญ tล™i dalลกรญ logickรฉ operรกtory, kterรฉ obฤas vyjadล™ujรญ pravidlo mnohem jasnฤ›ji neลพ sada pล™รญkazลฏ If.

OperaTor Vracรญ True, kdyลพ Pล™รญklad Vรฝstup
Xor Platรญ pล™esnฤ› jedna ze dvou podmรญnek, nikdy ne obฤ› obฤ› (1 = 1) Xor (5 = 0) Pravdivรฝ
Eqv Obฤ› podmรญnky majรญ stejnou hodnotu, obฤ› jsou pravdivรฉ nebo obฤ› nepravdivรฉ (1 = 1) Rovnice (2 = 2) Pravdivรฝ
Imp Prvnรญ podmรญnka implikuje druhou; pouze True Imp False je false. (1 = 1) Imp (5 = 0) Faleลกnรฝ

Xor je z tฤ›chto tล™รญ nejpraktiฤtฤ›jลกรญ. Vyhovuje pravidlu typu โ€žsleva se vztahuje na zamฤ›stnance nebo ฤlena vฤ›rnostnรญho programu, ale ne na nฤ›koho, kdo je obojรญmโ€œ. Eqv a Imp se objevujรญ hlavnฤ› ve starลกรญm kรณdu a v logickรฝch cviฤenรญch, takลพe jejich rozpoznรกnรญ je dลฏleลพitฤ›jลกรญ neลพ jejich napsรกnรญ.

Stรกhnฤ›te si Excel obsahujรญcรญ vรฝลกe uvedenรฝ kรณd

Nejฤastฤ›jลกรญ dotazy

Neexistuje ลพรกdnรฉ praktickรฉ omezenรญ, ale ฤitelnost rychle klesรก nad tล™i nebo ฤtyล™i. Pล™esuลˆte dlouhou podmรญnku do booleovskรฉ promฤ›nnรฉ s popisnรฝm nรกzvem a potรฉ tuto promฤ›nnou otestujte v pล™รญkazu If.

Aplikovรกno na ฤรญslo, Not provรกdรญ bitovou inverzi, nikoli logickou. Aplikuje se pouze na porovnรกnรญ nebo booleovskou promฤ›nnou, napล™รญklad Not (Qty > 0), takลพe vรฝsledek je True nebo False.

Logika je shodnรก, ale syntaxe se liลกรญ. Vzorec v listu je volรก jako funkce AND(A1>0, B1>0). VBA je mรญsto toho umisลฅuje mezi podmรญnky, jako v pล™รญpadฤ› Pokud A1 > 0 A B1 > 0 Pak.

Ano. Vloลพte podmรญnku a asistent s umฤ›lou inteligencรญ ji pล™epรญลกe s jasnฤ›jลกรญmi zรกvorkami nebo ji rozdฤ›lรญ na pojmenovanรฉ booleovskรฉ promฤ›nnรฉ. Ovฤ›ล™te pล™epsรกnรญ s pravdivostnรญ tabulkou, protoลพe chybnรฉ zjednoduลกenรญ nenรกpadnฤ› zmฤ›nรญ chovรกnรญ.

Ano. Zadejte vรฝraz a asistent s umฤ›lou inteligencรญ vypรญลกe vลกechny vstupnรญ kombinace s jejich vรฝsledkem, coลพ rychle odhalรญ vฤ›tev, kterรฉ se nikdy nelze dosรกhnout, nebo zรกvorku umรญstฤ›nou na nesprรกvnรฉ pozici.

Shrลˆte tento pล™รญspฤ›vek takto: