用於檢查非空白儲存格範圍是否相等的本機公式

用於檢查非空白儲存格範圍是否相等的本機公式

我有三個單元格,它們的任意組合都可以為空白。我想檢查所有非空白單元格是否相等。如果儲存格 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 ..

相關內容