VBA 逻辑 Operators:Excel VBA 中的 AND、OR、NOT、IF NOT
⚡ 智能摘要
VBA 逻辑 Opera运算符将多个条件组合成一个真或假的结果。本页通过可运行的命令按钮示例、完整的真值表以及不太常用的异或 (Xor)、等式 (Eqv) 和否定 (Imp) 运算符,解释了与 (AND)、或 (OR) 和非 (NOT) 运算符。

Excel VBA 逻辑 Opera职权范围
假设您要处理客户订单。为此,您首先要检查订购的产品是否存在。如果存在,您还需要检查库存数量是否足够。在这种情况下,逻辑运算符就派上用场了。逻辑运算符用于评估多个条件。
每个条件本身都是由……构成的。 比较算子 并返回 True 或 False。然后,逻辑运算符将这些结果合并成一个最终答案。
下表列出了主要的 Excel VBA 逻辑运算符 AND、OR、NOT:
| S / N | Opera器 | 描述 | 例如: | 输出 |
|---|---|---|---|---|
| 1 | AND | AND:用于组合多个条件。如果所有条件都为真,AND 计算结果为真。如果任何条件为假,AND 计算结果为假 | 如果 (1 = 1) 且 (0 = 1) 则 | false |
| 2 | OR | OR:用于组合多个条件。如果任何条件计算结果为真,则 OR 返回真。如果所有条件都为假,则 OR 返回假 | 如果 (1 = 1) 或 (5 = 0) 则 | true |
| 3 | 不是 | NOT:这个函数的作用类似于反函数。如果条件为真,则返回 false;如果条件为假,则返回 true。 | 如果不是(0 = 0)则 | false |
以上三个描述可以简化为一个输入和结果的表格,更容易记住。
VBA逻辑真值表 Opera职权范围
真值表列出了所有输入组合以及每个运算符返回的结果。只需阅读一次真值表,即可消除之后编写任何条件语句时的猜测。
| 条件A | 条件B | 甲和乙 | 甲或乙 | 不是一个 |
|---|---|---|---|---|
| 真 | 真 | 真 | 真 | 假 |
| 真 | 假 | 假 | 真 | 假 |
| 假 | 真 | 假 | 真 | 真 |
| 假 | 假 | 假 | 假 | 真 |
有两种模式值得记住。 AND 四行中只有一行结果为 True,因此缩小了选择范围。 OR 仅对其中一行产生 False 值,因此会加宽一行。 不是 它只需要一个条件而不是两个,所以它有自己的一列。
VBA 逻辑 Opera示例来源 Code
为了简单起见,我们将比较硬编码数字。
从“插入选项”向工作表添加 ActiveX 按钮。
如下图所示设置属性

下表显示了您需要更改的属性以及需要更新的值。
| S / N | 通过积极争取让商标与其相匹配的域名优先注册来维护 | 特性 | 价值 |
|---|---|---|---|
| 1 | 命令按钮 1 | 姓名 | 按钮AND |
| 标题 | AND Operator (1 = 1) 且 (0 = 0) | ||
| 2 | 命令按钮 2 | 姓名 | 或 |
| 标题 | OR Operator(1 = 1)或(5 = 0) | ||
| 3 | 命令按钮 3 | 姓名 | btn不 |
| 标题 | 不是 Operator 非(0 = 0) |
将以下代码添加到 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 如果并且 Opera器
- “如果(1 = 1)且(0 = 0)则” if 语句使用 AND 逻辑运算符将两个条件 (1 = 1) 和 (0 = 0) 组合在一起。如果两个条件都为真,则执行 'Else' 关键字上方的代码。如果两个条件都不为真,则执行 'Else' 关键字下方的代码。
这两个条件都成立,所以点击按钮会显示“AND 评估结果为 TRUE”。
将以下代码添加到 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 如果或 Opera器
- “如果(1 = 1)或(5 = 0)则” if 语句使用 OR 逻辑运算符组合两个条件:(1 = 1) 或 (5 = 0)。如果其中任何一个条件为真,则执行 else 关键字上方的代码。如果两个条件都为假,则执行 else 关键字下方的代码。
第一个条件为真,第二个条件为假,因此 OR 仍然返回真,消息显示“OR 计算结果为真”。
将以下代码添加到 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 如果不是 Opera器
- “如果不是(0 = 0)那么” VBA 的 If Not 函数使用 NOT 逻辑运算符来否定 if 语句条件的结果。内部条件 (0 = 0) 为真,因此 NOT 运算符将其变为假,并执行 'Else' 关键字下面的代码。如果内部条件为假,则 NOT 运算符会将其变为真,并执行 'Else' 关键字上面的代码。
这三个按钮分别测试一个固定值。实际条件从工作表中读取,并混合使用两类运算符。
如何将逻辑与比较结合起来 Opera职权范围
生产环境中的宏很少直接测试硬编码的数值。它会读取一个值,进行比较,并将多次比较结果合并为一个最终决策。下面的宏仅在产品存在、数量充足且客户账户未被冻结的情况下才会批准订单。
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
三条规则可确保组合条件清晰易懂且正确无误。
- 每次比较都要加上括号: VBA 会先计算比较运算符,再计算逻辑运算符,但方括号会使比较运算符和逻辑运算符的运算顺序发生变化。ping 显而易见,可以防止病情发展过程中出现错误。
- 注意“与”优先于“或”: A 或 B 和 C 读作 A 或(B 和 C)如果你的意思是…… (A 或 B)和 C括号是必填项。
- 不适用于布尔值,也不适用于数字: 未暂停 阅读自然流畅。避免 不是5因为 Not 函数对数字执行按位运算,返回 -6 而不是 False。
⚠️警告: VBA 不会发生短路。 如果 (ws 为空) 或 (ws.Name = “Data”) 则即使第一部分为真,第二部分仍然运行,这会引发运行时错误 91。将此类保护条件拆分为嵌套的 If 语句。
Xor、Eqv 和 Imp OperaVBA 中的 tors
AND、OR 和 NOT 几乎涵盖了所有日常情况,但 VBA 还提供了三个逻辑运算符,它们有时比一连串的 If 语句更能清晰地表达规则。
| Opera器 | 返回 True | 例如: | 输出 |
|---|---|---|---|
| 异或 | 这两个条件中只有一个成立,绝不可能两者都成立。 | (1 = 1)异或(5 = 0) | 真 |
| 方程 | 这两个条件的值相同,要么都为真,要么都为假。 | (1 = 1)等式(2 = 2) | 真 |
| 恶魔 | 第一个条件蕴含第二个条件;只有 True Imp False 为假 | (1 = 1) Imp(5 = 0) | 假 |
异或(Xor)是这三种运算符中最实用的。它适用于诸如“折扣适用于员工或会员,但不适用于同时是员工和会员的人”之类的规则。等式(Eqv)和中间件(Imp)主要出现在较旧的代码和逻辑练习中,因此识别它们比编写它们更重要。
