嘿,聪明的人,
我希望我的问题的标题足够合适,我已尽力了^^
我尝试将A列到Z列的2行进行比较,并检查它们内部是否具有相同的模式。使用模式我的意思是,如果在第1行的A列中写入了任何内容,那么在第2行的A列中也必须写入一些内容。或者,两者都可以为空。
听起来很简单,但是只有在模式DOESNT匹配时才允许执行if语句:用A1编写的内容,而不用A2编写的内容。
我确定我只是使用一种复杂的方法,但是即使在搜索了问题之后,我也找不到合适的,简单的解决方案。
我确定这对你们来说是小菜一碟,但我只是想不出如何构造它。 (也许是特定于星期五的问题;))
(在代码中,我跳过了循环部分,因为我猜想它对于问题是不必要的)
If Not (A1 = "" And A2 = "") Or Not (Not A1 = "" And Not A2 = "") Then
Boolean = False
End If
答案 0 :(得分:2)
简化您的布尔表达式表示它总是求值为true,因此这里存在问题。
布尔快速代数课程:
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)
假设变量分配不是实际代码的占位符。
答案 1 :(得分:1)
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
您可以根据自己的目的修改此代码,但是只要第一行和第二行中的列的值均不同,结果将为false,如果相等则为true。
列可以被视为字母或数字。
答案 2 :(得分:0)
我很难弄清楚该行代码要做什么,但这是我的看法。
仅当Boolean = False
为空且A1
不为空,或A2
不为空而A1
为空时,它才返回A2
。
If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
Boolean = False
End If
答案 3 :(得分:0)
您可以使用下面的公式来评估范围内的每个单元格是否为空。
=SUMPRODUCT(--(range<>""))=0
和类似的公式来检查每个单元格是否都为空:
=SUMPRODUCT(--(range=""))=0
并使用VBA应用该公式,否则将其用作普通的Excel公式。
来自此页面: https://exceljet.net/formula/all-cells-in-range-are-blank
答案 4 :(得分:0)
不是答案,但我的结论是您的陈述将始终为TRUE
一种略有不同的方法
Sub x()
Dim b As Boolean
b=(WorksheetFunction.CountBlank(Range("A1:A2")) <> 1)
End Sub
答案 5 :(得分:0)
关于我所了解的另一件事:
if (A1<> "" and A2<>"") or (A1= "" and A2="") then
Boolean = False
end if