首页 > 解决方案 > 有没有办法在这个 IF 语句中添加多个“NOT”

问题描述

嘿,聪明的人,

我希望我的问题的标题足够合适,我尽力了^^

我尝试比较从 A 列到 Z 列的 2 行,并检查它们内部是否具有相同的模式。对于模式,我的意思是如果在第 1 行 A 列中写入任何内容,那么在第 2 行 A 列中也必须写入一些内容。或者两者都可以为空。

听起来很简单,但 if 语句仅在模式不匹配时才允许执行:在 A1 中写入的内容,在 A2 中没有写入内容。

我确信我只使用了一种复杂的方法,但即使在谷歌搜索问题之后,我也找不到合适的简单解决方案。

我相信这对你们来说是小菜一碟,但我就是不知道如何构建它。(也许是周五的具体问题;))

(在代码中我跳过了循环部分,因为我猜它对问题没有必要)

                If Not (A1 = "" And A2 = "") Or Not (Not A1 = "" And Not A2 = "") Then
                    Boolean = False
                End If

标签: excelvbaif-statement

解决方案


简化你的布尔表达式表明它总是评估为真,所以这里有一个问题。

快速布尔代数课:

NOT(A AND B) = NOT(A) OR NOT(B)
NOT(A OR B) = NOT(A) AND NOT(B)

当应用于您的表达式时,为简单起见写A1 = ""asAA2 = ""as B

  Not (A And B) Or Not (Not A And Not B)
= Not(A) Or Not(B) or Not(Not(A)) or Not(Not(B))
= Not(A) Or Not(B) or A or B
= True

你的意思是,我相信,是这样的:

  Not((A and B) or (Not(A) and Not(B)))

这可能会被简化,但这会损害可读性(您想要检查的内容变得不那么明显)。

最后,你不应该这样写:

If Expression
    Boolean = False

反而:

Boolean = Not(Expression)

假设变量赋值不是实际代码的占位符。


推荐阅读