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.

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

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
