Excel筛选-去重-计数三连招里面的大坑,我替大家踩过了

B站影视 电影资讯 2025-08-29 22:13 1

摘要:看似完美,但应用到“供应商3”时明显有误。此处正确结果应该是0,而不是1.

需求:统计供应商的合格零件数量。

常规解决方案

这样的场景很常见,筛选-去重-计数三步搞定。

FILTER筛选出指定供应商的合格零件:

=FILTER(B:B,(C:C="合格")*(A:A=E2))

筛选结果有重复值,UNIQUE去重:

=UNIQUE(FILTER(B:B,(C:C="合格")*(A:A=E2)))

最后对数组中的非空单元格计数:

=COUNTA(UNIQUE(FILTER(B:B,(C:C="合格")*(A:A=E2))))

漏洞

看似完美,但应用到“供应商3”时明显有误。此处正确结果应该是0,而不是1.

FILTER+UNIQUE+COUNTA这一组合已经流传甚广,只有少数网友发现了这一漏洞,毕竟它只在特定情况下才会现出原形。

原因

其实原因很简单,回到第一步筛选:

=FILTER(B:B,(C:C="合格")*(A:A=E4))

由于没有符合筛选条件的结果,FILTER返回错误值。

下一步UNIQUE去重结果也是错误值。

再下一步COUNTA统计非空单元格结果为1,因为放了错误值的单元格也是非空单元格。

所以在没有满足筛选条件的情况下始终返回错误结果1.

改进方案

有两个改进方案,都是从最后一步计数入手。

方案1,ROWS+IFFERROR取代COUNTA

ROWS用于统计UNIQUE返回数组的行数,UNIQUE返回错误值时ROWS也返回错误值,IFERROR将错误值转换为0:

=IFERROR(ROWS(UNIQUE(FILTER(B:B,(C:C="合格")*(A:A=E4)))),0)

方案2,LEN+COUNT代替COUNTA

LEN用于统计UNIQUE返回数组各元素的长度,得到一个数字数组,COUNT统计数字的个数即可。当UNIQUE返回错误值时LEN也返回错误值,COUNT统计错误值得0:

=COUNT(LEN(UNIQUE(FILTER(B:B,(C:C="合格")*(A:A=E4)))))

漏洞的根本原因是没有符合条件的数据时FILTER返回错误值,把FILTER第三参数用起来,没有符合条件的数据时让它返回空,能不能解决?为什么?

来源:Excel笔记本一点号

相关推荐