用于检查非空白单元格范围是否相等的本机公式

用于检查非空白单元格范围是否相等的本机公式

我有三个单元格,其中任意组合都可以为空白。我想检查所有非空白单元格是否相等。如果单元格 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 ..

相关内容