下表记录的是一些人的信息,包含姓名,年龄和职务。其中有些人没有职务,就是空白单元格。求不重复职务的个数。通过动图的演示,可以看到不重复的职务有5个。如何通过函数计算出来呢? 
假如没有空白单元格,很多小伙伴可能会想到下面的这种方法,输入公式=SUM(1/COUNTIF(C3:C16,C3:C16)),按ctrl+shift+enter。这样是可以的。 但是当有空白单元格时,这个公式就不行了。结果如下图所示,返回错误值#DIV/0!。为什么会这样呢?就要看countif返回的结果了。 COUNTIF(C3:C16,C3:C16)返回的结果如下图D列黄色区域所示,可以看到当C列的职务是空白单元格时,对应的值为0。用1除以countif返回的结果,当除数是0时,必然会产生错误值。为什么空白单元格对应的值是0呢?说下我个人的理解,未必正确。C3:C16作为countif的条件时,也就是第2参数,在计算的时候空白单元格会转为0。 可以在编辑栏中选中countif的第2参数,按F9查看结果。所以对于空白单元格来说,其实是统计0的个数。而C3:C16这个区域中不包含0,所以最后的结果是0。 1.iferror处理错误值 既然1/countif会出现错误值,那么可以用iferror来处理下错误值。输入下面的公式,按ctrl+shift+enter。=SUM(IFERROR(1/COUNTIF(C3:C16,C3:C16),))

D列黄色区域是1/countif的结果,会产生错误值。用iferror将错误值返回0,最后用sum求和。输入下面的公式,按ctrl+shift+enter。=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
输入下面的公式,按ctrl+shift+enter。其中countif部分和第2种方法的countif完全一样,结果如上图E列所示。此公式将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对应的是重复出现的。 用1除以F列的结果,true变为1,其他的都变为错误值,最后用count统计数字的个数就是不重复的个数。https://pan.baidu.com/s/17or4GflPgPvydk6NAzwMfg
|