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