我有三个单元格,其中任意组合都可以为空白。我想检查所有非空白单元格是否相等。如果单元格 1 和 2 有值,而单元格 3 为空白,我希望公式在单元格 1 和 2 相等时返回 TRUE。
如果没有本国的为此,我只需编写一个 VBA 宏。
更新:实际上,编写 VBA 宏会更快。我是一名 .NET/c# 开发人员,已经忘记了很多以前的 VBA,因此我愿意改进这里的代码(尤其是设置返回值和退出函数)。
Public Function NonblankValuesAreEqual(cells As Range) As Boolean
Dim lastval As String
lastval = cells(1).Value
For i = 2 To cells.Count
If lastval <> "" Then
If cells(i).Value <> "" Then
If cells(i).Value <> lastval Then
NonblankValuesAreEqual = False
Exit Function
End If
End If
End If
lastval = cells(i).Value
Next
NonblankValuesAreEqual = True
End Function
答案1
您已经用宏自己回答了这个问题,但这里有一个非 VBA 解决方案。这是一个数组公式,必须使用 ctrl+shift+enter 进行确认:
=(SUM(IFERROR(1/COUNTIF(A1:A3,A1:A3),0))=1)
此公式计算范围内唯一值的数量,同时忽略空白单元格。如果唯一值的数量为 1,则每个值都相同,并且公式返回 TRUE。您的问题中唯一没有说明的是如果每个单元格都是空白的该怎么办。现在公式将返回 TRUE,但添加一些额外的逻辑来改变这一点很容易。
答案2
检查每列对是否完全相等(区分大小写)或包含空白。
=OR(EXACT(A2,B2),ISBLANK(A2),ISBLANK(B2))
=OR(EXACT(A2,C2),ISBLANK(A2),ISBLANK(C2))
=OR(EXACT(B2,C2),ISBLANK(B2),ISBLANK(C2))
=AND(D2:F2)
例子:
A B C AB AC BC AND
1 1 1 TRUE TRUE TRUE TRUE
1 1 TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
a A a FALSE TRUE FALSE FALSE
a a TRUE TRUE TRUE TRUE
a 2 TRUE FALSE TRUE FALSE
A A TRUE TRUE TRUE TRUE
A A TRUE TRUE TRUE TRUE
A B TRUE TRUE FALSE FALSE
A B C FALSE FALSE FALSE FALSE
注意:对于更大的集合,相邻列的数量将大大增加:n!/ 2
答案3
尝试一下这个小UDF():
Public Function EqualTest(r1 As Range, r2 As Range, r3 As Range) As Variant
Dim BlankCount As Long, v1 As Variant, v2 As Variant, v3 As Variant
v1 = r1.Value
v2 = r2.Value
v3 = r3.Value
BlankCount = 0
If v1 = "" Then BlankCount = BlankCount + 1
If v2 = "" Then BlankCount = BlankCount + 1
If v3 = "" Then BlankCount = BlankCount + 1
If BlankCount > 1 Then
EqualTest = True
Exit Function
End If
If BlankCount = 0 Then
If v1 = v2 And v1 = v3 And v2 = v3 Then
EqualTest = True
Exit Function
Else
EqualTest = False
Exit Function
End If
End If
If v1 = v2 Or v1 = v3 Or v2 = v3 Then
EqualTest = True
Else
EqualTest = False
End If
End Function
笔记:
这些单元格不必相邻,并且UDF()适用于数字单元格和文本单元格。
答案4
尝试:
=COUNTA(A:A)=COUNTIF(A:A,A1)
基本上就是计算非空白单元格的数量。计算与第一个单元格匹配的单元格数量。如果这些单元格相同,那么它们一定全部相同。对于第二个 COUNTIF,你计算谁并不重要……因为如果它们不全部相同,它就不太可能等于 COUNTA ;)
[编辑] 如果你的第一个单元格可能是空白的,请尝试这个:
=COUNTA(A:A)=COUNTIF(A:A,VLOOKUP("*",A:A,1,FALSE))
它会尝试找到第一个非空白单元格来检查 COUNTIF ..