COUNTIF函数的第二参数和第一参数的单元格区域相同时,会依次计算每个元素出现的次数。运用COUNTIF函数,可以统计数据区域中的不重复个数。
公式为:
=SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10))
***********
公式中“COUNTIF(A1:A10,A1:A10)”部分是数组计算,运算过程相当于:
=COUNTIF(A1:A10,A2)
=COUNTIF(A1:A10,A3)
……
=COUNTIF(A2:A10,A10)
COUNTIF函数分别统计A2:A10单元格区域中每个元素出现的次数。返回内存数组结果为:
{4;4;2;4;4;4;4;2;4;4}
再使用1除以返回的内存数组,得到以下结果:
{0.25;0.25;0.5;0.25;0.25;0.25;0.25;0.5;0.25;0.25}
***********
用1除,即相当于计算COUNTIF函数所返回内存数组的倒数。为便于理解,把这一步的结果中的小数部分使用分数代替,结果为:
{1/4;1/4;1/2;1/4;1/4;1/4;1/4;1/2;1/4;1/4}
***********
如果单元格的值在区域中是唯一值,这一步的结果是1。
如果重复出现两次,这一步的结果就有两个1/2。
如果单元格的值在区域中重复出现3次,结果就有3个1/3…
即每个元素对应的倒数合计起来结果仍是1。
最后用SUMPRODUCT函数求和,得出不重复的人员总数。
***********
这种解法有一个副作用,就是使用1/N的除法运算会产生浮点误差,有时候会产生莫名错误,可以使用ROUND函数进行修约。
***********
最后再给一个MATCH函数的用法:
=SUMPRODUCT(1*(MATCH(A1:A10,A1:A10,0)=ROW(1:10)))
你能试着解释一下吗?
联系客服