VBA 逻辑 Operators:Excel VBA 中的 AND、OR、NOT、IF NOT

⚡ 智能摘要

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

  • 🔗 目的: 逻辑运算符可以在单个 If 语句中评估多个条件。
  • AND OperaTOR: 只有当它所连接的每个条件都为真时,才返回真。
  • OR OperaTOR: 当至少一个条件为真时,返回真。
  • 🔄 不是 OperaTOR: 反转结果,将 True 变为 False,将 False 变为 True。
  • 📊 真值表: 单个参考网格显示了每个运算符对每种输入组合的结果。
  • 🧮 追求卓越 Opera目的: Xor、Eqv 和 Imp 分别处理互斥条件、等价条件和隐含条件。
  • ⚠️ 无短路: VBA 会评估条件的每个部分,因此守卫测试必须位于嵌套的 If 语句中。

VBA 逻辑 Opera在 Excel VBA 中使用 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 按钮。

如下图所示设置属性

VBA 逻辑 Opera职权范围
VBA 逻辑 Opera职权范围

下表显示了您需要更改的属性以及需要更新的值。

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)主要出现在较旧的代码和逻辑练习中,因此识别它们比编写它们更重要。

下载包含上述代码的 Excel

常见问题

虽然没有实际的限制,但超过三四个条件后,可读性会迅速下降。可以将过长的条件移到一个带有描述性名称的布尔变量中,然后在 If 语句中测试该变量。

对数字应用 NOT 函数时,执行的是按位取反而不是逻辑取反。它只能用于比较或布尔变量,例如 NOT (Qty > 0),因此结果为 True 或 False。

逻辑相同,但语法不同。工作表公式将它们作为函数调用,例如 AND(A1>0, B1>0)。而 VBA 则将它们放在条件之间,例如 If A1 > 0 And B1 > 0 Then。

是的。粘贴条件后,AI 助手会用更清晰的括号重写它,或者将其拆分成命名的布尔变量。请对照真值表验证重写结果,因为错误的简化会悄无声息地改变程序行为。

是的。输入表达式后,人工智能助手会列出所有输入组合及其结果,从而快速发现永远无法到达的分支或放置错误的括号。

总结一下这篇文章: