ARTICLE · 1168198
COUNT 还是 COUNTA?Excel 数数到底该用哪个
COUNT 还是 COUNTA?Excel 数数到底该用哪个·Excel数据处理 第2篇COUNT 还是 COUNTA?Excel 数数到底该用哪个 
内容摘要 1.先说结论:看你数的是什么 COUNT 和 COUNTA 名字像双胞胎,数东西的规则差很远: COUNT:只数数字(含日期,因为日期底层是数字)。文本、空单元格、逻辑值、错误值,一律不数。
COUNTA:数所有非空单元格。数字、文本、逻辑值、错误值、公式返回的空串 "",统统计入;只有真正空着的格子才不数。 一句话记住:COUNT = 数数字;COUNTA = 数非空。 重点:选哪个不看「我想数数」,而看「我要数的是数字还是填了东西的格子」。这点先定,后面写法都顺。 2.日常处理对照 假设 A1:A5 是 10、20、完成、待定、40,三种函数各有各的数法: COUNT(A1:A5)只数 10、20、40 | 3 COUNTA(A1:A5)数全部 5 个(含文字) | 5 COUNTBLANK(A1:A5)只数空格子 | 0 实际处理时最常用这条分叉:数销售额、分数这类数字 → COUNT;数姓名、状态这类填没填 → COUNTA。 3.处理含空数据要注意的细节 做数据处理时,空单元格一旦进到 INT() 这类算术数组,会被当成 0。这不是猜的——ExcelJet、ExcelMaster 等文档都写过:空单元格进 UNIQUE 会「evaluate to zero」,于是 COUNTA(UNIQUE()) 的计数会多出 1。 我用脚本精确模拟了 Excel 行为,三组数据处理结果: ① 干净 1,2,33 | 3 | 3 ② 整列空(3 格全空)0 | 0 | 1 ③ 混一个空 1,2,空2 | 2 | 3 看 ②:整列空,真实该是 0。但 INT 把空格子变成 0,UNIQUE 去重后剩 {0},COUNTA 数到 1——空表被数成了「有 1 个值」。 正确:正确做法:要排除空单元格,别先 INT() 再数。直接对原始区间用 COUNT(它只数数字,空自然忽略),或配 FILTER 先剔空。 4.含空、要去做重:怎么写才稳 场景:一份编号清单,区间可能混着空行,还要「去重后有几个」。直接用 COUNTA(UNIQUE(INT())) 会把空算进去(见上表 ② ③)。 稳妥写法:先用 FILTER 把空格剔除,再 UNIQUE 去重、COUNTA 计数: FILTER 先把空格子过滤掉,空就不会变成 0 混进来,去重计数结果才准。 我对 5 个编号(第 3 行漏填)做了实测: 两行一致,漏填的空行不会被当成 0 号计入。 处理含空数据,先想清楚「空要不要参与计算」,再选函数。 5.到底该用哪个(决策表) 别背规则,看你这一次要处理的是什么: 数「填了的数字」→ 用 COUNT。空单元格它直接忽略,不会被当成 0。
数「填了东西的格子」→ 用 COUNTA。文字也能数,但公式返回的 "" 也算。
去重且区间可能含空 → 先用 FILTER 剔除空,再 UNIQUE:
示意图 · PlantUML 渲染6.处理时的几个注意点 编号存成文本,COUNT 不数,先用「分列」转数字。
公式空串 "",COUNTA 照样数,判断时留意。
先 INT 过的区间,空会变 0,处理含空数据要避开。
老版本用 SUMPRODUCT(1/COUNTIF(区间,区间&"")) 兜底。 这套区分整理成一张决策表,复制改下区间就能用,不用转发、不用付费。 *本文为作者个人经验整理,仅供参考。* 点个「在看」鼓励一下 💬 评论区聊两句 #Excel#COUNT#COUNTA#计数#数据处理#办公自动化 本文为作者个人经验整理,仅供参考。

COUNT 只数数字、COUNTA 数所有非空。处理含空、含文本、要去做重的计数任务时,怎么选、怎么写才稳。本文给决策表、可跑写法和本机实测数字。
COUNTA:数所有非空单元格。数字、文本、逻辑值、错误值、公式返回的空串 "",统统计入;只有真正空着的格子才不数。
=COUNTA(UNIQUE(FILTER(A1:A100, A1:A100<>"")))
=COUNT(A1:A5) ' 数到 4(原始区间只数数字)
=COUNTA(UNIQUE(FILTER(A1:A5,A1:A5<>""))) ' 数到 4(先剔空再数)
数「填了东西的格子」→ 用 COUNTA。文字也能数,但公式返回的 "" 也算。
去重且区间可能含空 → 先用 FILTER 剔除空,再 UNIQUE:
=COUNTA(UNIQUE(FILTER(A1:A100, A1:A100<>"")))
示意图 · PlantUML 渲染公式空串 "",COUNTA 照样数,判断时留意。
先 INT 过的区间,空会变 0,处理含空数据要避开。
老版本用 SUMPRODUCT(1/COUNTIF(区间,区间&"")) 兜底。
你在开发中遇到哪些问题,或者对今天的内容有不同看法?欢迎在评论区聊聊,咱们一起讨论 👇















































































