Google Sheets中如何使用COUNTIF统计排除#N/A错误的有效值
Google Sheets 中 FILTER 结果计数受 #N/A 干扰的解决方法
日常梳理精简表格公式时优先使用FILTER函数,该函数无匹配筛选结果时会返回#N/A错误,而COUNTA会将#N/A纳入计数范围,导致统计结果错误。
测试复现
测试表A列数据:
| A |
|---|
| foo |
| bar |
| baz |
写入如下测试公式:
=COUNTA(FILTER(A1:A3, A1:A3 = "foo")) =COUNTA(FILTER(A1:A3, A1:A3 = "bar")) =COUNTA(FILTER(A1:A3, A1:A3 = "baz")) =COUNTA(FILTER(A1:A3, A1:A3 = "Gabriel")) =COUNTA(FILTER(A1:A3, A1:A3 = "bog")) =COUNTA(FILTER(A1:A3, A1:A3 = "nit")) =COUNTA(FILTER(A1:A3, A1:A3 = "bug"))
所有公式均返回1,包括无任何匹配项的后4条公式,原因是COUNTA将FILTER返回的#N/A错误识别为1个统计项。
已测试的无效/冗余方案
- 冗余嵌套写法:
=IF(IFERROR(FILTER(A1:A3, A1:A3 = "bog"), -1) = -1, 0, COUNTA(FILTER(A1:A3, A1:A3 = "bog")))
该写法需要重复书写两次FILTER逻辑,公式长度翻倍。Excel中可通过LET函数定义重复变量简化,但Google Sheets环境下该写法冗余度太高。
COUNTIF反向判断方案:
测试确认=COUNTIF(FILTER(A1:A3, A1:A3 = "foo"), NA())可正确统计FILTER返回结果中#N/A的数量(无匹配时返回1),但尝试用反向条件统计有效结果时:
=COUNTIF(FILTER(A1:A3, A1:A3 = "foo"), "<>"&NA())
该写法逻辑失效,返回结果与统计#N/A数量的公式完全一致,无法得到有效匹配项的正确计数。
最优解决方案
直接在FILTER外层套一层IFERROR将无匹配时返回的错误值转为空值,再使用COUNTA统计即可,无需重复书写筛选逻辑,适配Google Sheets环境:
=COUNTA(IFERROR(FILTER(A1:A3, A1:A3 = "bog")))
逻辑说明:
- 当FILTER无匹配结果返回
#N/A时,IFERROR会将错误值替换为空,COUNTA统计空值返回0 - 当FILTER存在匹配结果时,
IFERROR不改动返回的有效值列表,COUNTA可正常统计匹配到的条目总数
如果筛选的源数据区域本身存在#N/A错误值,需要同时排除源数据错误和无匹配错误,可以使用如下写法:
=COUNTA(IFERROR(FILTER(A1:A3, (A1:A3 = "bog")*NOT(ISERROR(A1:A3)))))
内容的提问来源于stack exchange,提问作者Gabriel Pierce
相关产品推荐
相关产品推荐

