excel 有没有办法在IF语句中应用多个“NOT”?

bqjvbblv  于 2023-02-25  发布在  其他
关注(0)|答案(6)|浏览(166)

我试图比较从A列到Z列的两行,并检查它们是否具有相同的模式。
模式的意思是,如果在第一行A列写了什么,那么在第二行A列也一定写了什么。
或者两者都可以为空。
如果模式不匹配,则执行If语句,因此:
A1里写的东西,A2里什么都没写。
在代码中,我跳过了循环部分,因为我猜它对这个问题是不必要的。

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

o7jaxewo1#

对你的布尔表达式进行符号化会显示它总是赋值为真,所以这里有一个问题。
快速布尔代数课:

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

应用到表达式时,为简单起见,将A1 = ""写为A,将A2 = ""写为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)

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

qeeaahzv

qeeaahzv2#

Dim i As Long, result As Boolean
For i = 1 To 25
    If Cells(1, i).Value = Cells(2, i).Value Then
        result = True
    Else
        result = False
        Exit For
    End If
Next i

您可以根据自己的需要修改此代码,但是只要一列的第一行和第二行的值不同,result将为false,如果它们相等,则为true。
列可以被视为字母或数字。

1u4esq0p

1u4esq0p3#

我很难弄清楚你想用这行代码做什么,但我有一个尝试,只有当A1为空而A2不为空,或者A1不为空而A2为空时,它才会返回Boolean = False

If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
    Boolean = False
End If
kxe2p93d

kxe2p93d4#

您可以使用类似下面的公式来计算区域中的每个单元格是否为空。

=SUMPRODUCT(--(range<>""))=0

以及一个类似的公式来检查是否每个单元格都不为空:

=SUMPRODUCT(--(range=""))=0

并使用VBA应用公式,或者作为普通Excel公式应用。
摘自本页:https://exceljet.net/formula/all-cells-in-range-are-blank

bvn4nwqk

bvn4nwqk5#

不是答案,但我的结论是,您的陈述将始终评估为真

一个稍微不同的方法

Sub x()

Dim b As Boolean

b=(WorksheetFunction.CountBlank(Range("A1:A2")) <> 1)

End Sub
beq87vna

beq87vna6#

另一个关于我所理解的:

if (A1<> "" and A2<>"") or  (A1= "" and A2="") then
     Boolean = False
 end if

相关问题