日常工作中,有时候可能会遇到统计人数的场景,如果数表里的人名是唯一不重复的,这种情况下的人数统计非常简单,如果名单中的人名是重复的,该怎么解决呢?
现有如下统计表格。
这个统计表的特点是,Name列的人名是重复的,一个人对应多个不同的Product。这种情况下,怎么统计Name这一列共有多少个人呢?
关于这个问题,最关键的地方是让重复出现的值只出现一次或者计数一次。解决办法有以下几种。
1.筛选
通过筛选,我们可以得到这一列的全部可能情况,这时筛选功能对重复项自动忽略,只显示一次。
对于被统计列表内统计值数量较少的情况下,这种方法比较方便,但是在统计值数量比较大的时候,需要逐个去数,显然就不适用了。
2.数据透视表
这种方法与第一种类似,也是对于重复出现的数值只显示一次。
与筛选类似,对于统计值数量较少的情况下,比较实用。
3.数据-删除重复项
这种方法的思路与前两种类似,前两种方法对于重复出现的数值只显示一次,这种方法则是把重复出现的数值删除到只剩一个。
我们可以打开“数据”选项卡下的“删除重复值”功能。这种方法会对元数据造成破坏,建议把需要统计的列粘贴到新的工作表再执行。
这里,我们按照Name这一列执行删除重复项,得到如下结果。
这个方法的缺点是如果数据中间有空白单元格,那么空白单元格也会被计数。
4.SUMPRODUCT函数
在介绍函数方法之前,我们先看这样一个例子。假设现有如下表格,如何对Name列数值计数?
我们用眼睛就能直接看出是5个名字,但是在计算机中,所有的操作都是基于逻辑和判断,一种计数方法如下。
这里最关键就是FREQUENCY这一列,这个例子可能不太容易看出计数逻辑,我们再看下面这个例子。
名单中,"Julie"出现了两次,所以COUNT列中,我们把"Julie"全部计为2,FREQUENCY这一列实际上是1/COUNT,通过取倒数,每个"Julie"出现的频率就变为了1/2,那么就有1/2+1/2=1,这样就可以实现重复值只计数1次。
根据以上的思路,我们回到例题中。
首先,我们可以使用COUNTIF函数对名单里每个名字出现次数进行计数,再对每个计数取倒数,然后把全部倒数求和即可得到名单中共有多少个人。
=SUM(1/COUNTIF(A19:A41,A19:A41))
因为函数中的参数为数组,对于数组函数,我们需要按住ctrl+shift+enter进行计算。对于数组求和,我们也可以用SUMPRODUCT函数。
=SUMPRODUCT(1/COUNTIF(A19:A41,A19:A41))
但是,上述公式并不能解决如果数据中间存在空白单元格的问题,比如
这时,由于COUNTIF(A19:A42,A19:A42)返回数组{7;8;7;1;8;7;6;1;0;8;7;8;6;7;6;8;7;8;6;7;6;8;6;8},数组中包含元素0,这时1/COUNTIF(A19:A42,A19:A42)显然报错。
这里我们可以用IFERROR函数对公式做一下改进。
=SUM(IFERROR(1/COUNTIF(A19:A42,A19:A42),0)),或者
=SUMPRODUCT(IFERROR(1/COUNTIF(A19:A42,A19:A42),0))
当数组COUNTIF(A19:A42,A19:A42)中的某个元素为0时,1/0报错,函数直接返回0。经过这个改进,如果名单中存在空白单元格,公式也能进行计数。
总结:
对于人名重复出现的名单计数问题,本文介绍了4种方法。前3种方法的思路是让重复出现的人名只出现一次,然后计数,第4种方法的思路是通过计算名单中每个名字出现的频率再求和进行计数,每种方法各有优劣,大家可以在工作中视情况使用。
承接上文: 更新记录: 2023.3.30 “基于马来语的混合语”从“基于亚洲其它语言”中提出单独作为一章(+修改标题),并大幅扩充 ...