COUNTIF函數(shù)的第二參數(shù)和第一參數(shù)的單元格區(qū)域相同時,會依次計算每個元素出現(xiàn)的次數(shù)。運用COUNTIF函數(shù),可以統(tǒng)計數(shù)據區(qū)域中的不重復個數(shù)。
公式為:
=SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10))
***********
公式中“COUNTIF(A1:A10,A1:A10)”部分是數(shù)組計算,運算過程相當于:
=COUNTIF(A1:A10,A2)
=COUNTIF(A1:A10,A3)
……
=COUNTIF(A2:A10,A10)
COUNTIF函數(shù)分別統(tǒng)計A2:A10單元格區(qū)域中每個元素出現(xiàn)的次數(shù)。返回內存數(shù)組結果為:
{4;4;2;4;4;4;4;2;4;4}
再使用1除以返回的內存數(shù)組,得到以下結果:
{0.25;0.25;0.5;0.25;0.25;0.25;0.25;0.5;0.25;0.25}
***********
用1除,即相當于計算COUNTIF函數(shù)所返回內存數(shù)組的倒數(shù)。為便于理解,把這一步的結果中的小數(shù)部分使用分數(shù)代替,結果為:
{1/4;1/4;1/2;1/4;1/4;1/4;1/4;1/2;1/4;1/4}
***********
如果單元格的值在區(qū)域中是唯一值,這一步的結果是1。
如果重復出現(xiàn)兩次,這一步的結果就有兩個1/2。
如果單元格的值在區(qū)域中重復出現(xiàn)3次,結果就有3個1/3…
即每個元素對應的倒數(shù)合計起來結果仍是1。
最后用SUMPRODUCT函數(shù)求和,得出不重復的人員總數(shù)。
***********
這種解法有一個副作用,就是使用1/N的除法運算會產生浮點誤差,有時候會產生莫名錯誤,可以使用ROUND函數(shù)進行修約。
***********
最后再給一個MATCH函數(shù)的用法:
=SUMPRODUCT(1*(MATCH(A1:A10,A1:A10,0)=ROW(1:10)))
你能試著解釋一下嗎?