今天跟大家分享的是Excel对筛选结果进行非空计数。如下图所示,左侧是部门员工值班表格,右侧根据部门查找出每个部门值班人数。因为一个人可能值班多次,我们在统计人数时需要先去掉重复值。

Excel中如何对筛选结果进行非空计数?-趣帮office教程网

遇到上面的场景,可能很多小伙伴都是使用下面的方法:

在目标单元格中输入公式:

=COUNTA(UNIQUE(FILTER(C:C,B:B=F2)))

然后点击回车,下拉填充数据即可。

Excel中如何对筛选结果进行非空计数?-趣帮office教程网

解读:

上面的公式首先使用FILTER函数查找对应“部门”值班的员工名单;然后再通过UNIQUE函数去掉重复的员工姓名;最后再使用COUNTA函数统计非空单元格数量。

特别提醒:

上面公式看似逻辑没什么问题,但是它有一个致命的缺点,就是一旦查不到符号条件的数据,返回错误值后再使用COUNTA函数统计值班员工人数,返回的错误值也会被统计成1,也就是COUNTA函数把错误值也会统计成值班员工的数量。

Excel中如何对筛选结果进行非空计数?-趣帮office教程网

遇到上面的应用场景,我们可以用以下两种方法轻松解决,对筛选结果进行非空计数的问题,下面直接上干货:

方法一:

直接在目标单元格中输入公式:

=IF(COUNTIF(B:B,F2)=0,0,COUNTA(UNIQUE(FILTER(C:C,B:B=F2))))

然后点击回车,下拉填充数据即可

Excel中如何对筛选结果进行非空计数?-趣帮office教程网

解读:

上面公式中使用IF函数,先判断有没有符号条件的数据,如果COUNTIF(B:B,F2)=0说明没有符号条件的数据,那结果就返回0;否则再使用COUNTA函数对筛选结果进行非空计数即可。

方法二:

在目标单元格中输入公式:

=SUMPRODUCT((UNIQUE(FILTER(C:C,B:B=F2,0))<>0)*1)

然后点击回车,下拉填充公式即可

Excel中如何对筛选结果进行非空计数?-趣帮office教程网

解读:

①公式中UNIQUE(FILTER(C:C,B:B=F2,0)含义就是根据“部门”名称查找到对应的部门的值班员工名单,然后去掉重复值,如果查找不到值就返回0

②公式中UNIQUE(FILTER(C:C,B:B=F2,0))<>0就是一个判断条件,当返回值不等于0时,符合条件返回一组逻辑值TRUE,也就是有几个不重复的姓名就返回几个逻辑值TRUE;否则当返回值等于0,返回逻辑值FALSE,也就是没有找到符合条件的数据。

③因为逻辑值TRUE和FALSE无法直接参与运算,所以同乘以1把逻辑值转换成数值。逻辑值TRUE其实就是1,逻辑值FALSE就是0,它们都乘以1后就生成了一组由1和0组成的数组,最后再用SUMPRODUCT函数求和即可获得人数。