统计带空白单元格的区域中不重复值的个数

假如没有空白单元格,很多小伙伴可能会想到下面的这种方法,输入公式=SUM(1/COUNTIF(C3:C16,C3:C16)),按ctrl+shift+enter。这样是可以的。


为什么空白单元格对应的值是0呢?说下我个人的理解,未必正确。C3:C16作为countif的条件时,也就是第2参数,在计算的时候空白单元格会转为0。
可以在编辑栏中选中countif的第2参数,按F9查看结果。所以对于空白单元格来说,其实是统计0的个数。而C3:C16这个区域中不包含0,所以最后的结果是0。
1.iferror处理错误值
=SUM(IFERROR(1/COUNTIF(C3:C16,C3:C16),))

=SUM((C3:C16<>"")/COUNTIF(C3:C16,C3:C16&""))

D列是(C3:C16<>"")返回的结果,不是空单元格的返回true,是空单元格的返回false。
E列是COUNTIF(C3:C16,C3:C16&"")返回的结果,countif的第2参数在C3:C16的后面连接空文本,将空白单元格变为空文本。此时就相当于统计空单元格的个数,可以看到空单元格对应的数值是3。
F列是二者相除得到的结果,可以看到空白单元格对应的数值为0,不影响后续的计算结果,最后用sum求和。
=SUM(IF(C3:C16<>"",1/COUNTIF(C3:C16,C3:C16)))
3.统计出包含空单元格的不重复个数,再减1
=SUM(1/COUNTIF(C3:C16,C3:C16&""))-1

输入下面的公式,按ctrl+shift+enter。
=COUNT(1/(MATCH(C3:C16,C:C,)=ROW(3:16)))

MATCH(C3:C16,C:C,)返回的结果如D列所示,空白单元格对应的值是错误值。ROW(3:16)返回的结果如E列所示。
F列是二者相等返回的结果,true对应的是第1次出现的,错误值对应的是空白单元格,false对应的是重复出现的。
https://pan.baidu.com/s/17or4GflPgPvydk6NAzwMfg
