夜雨聆风学习资料网

ARTICLE · 1276901

AI 写的 Excel 公式没错,为什么一粘就变 0

AI 写的 Excel 公式没错,为什么一粘就变 0

上一篇结尾我说,下一条讲 AI 给的公式完全正确、粘进你的表却算出 0。今天把这个坑说完。

先说清楚这件事有多憋屈:公式一个字符都没错,你照着 AI 给的抄进去,回车,单元格跳出来一个 0。回头看数据,B2 到 B4 明明躺着 3、5、2 —— 加起来明明是 10。

于是你开始怀疑公式,改括号、改逗号、把 SUM 换成 SUMIF、又换成 SUMPRODUCT,全是 0。

问题从来不在公式。在于那三个格子里的东西,Excel 不认为它们是数字。

01 AI 看不见你的格子

你跟 AI 说的是:「B 列是工时,帮我算个总和。」

AI 看到的就是这句话。它不知道 B 列那些数字是真的数字,还是长得像数字的一段文字 —— 它一个字都看不到。它只能保证公式在语法上是 =SUM(B2:B4),保证不了这个公式在你的表里能算出东西。

而 SUM 是有脾气的:它只加自己认得出的数字,其余的当不存在。 不报错、不提示、不警告,跳过就完了。

所以「公式对不对」和「结果对不对」是两件事。公式对了,结果照样能是 0。

02 第一种:数字存成了文本

这是最常见的一种,也是上一篇承诺过的那个「数字后面跟着空格」。

三格数字,一列存成文本、一列存成真数字,三个函数一起算:

文本列:SUM 得 0,MAX 得 0,AVERAGE 直接 #DIV/0!

>

数字列:SUM 得 10,MAX 得 5,AVERAGE 得 3.33

A1:C8。同一批数字两种存法。文本列的 SUM 给 0,MAX 给 0,AVERAGE 连平均数都算不出来

AVERAGE 报 #DIV/0! 的原因很说明问题:它内部是「总和 ÷ 个数」,而它对文本的处理是一个都不算 —— 总和 0、个数 0,于是除以 0。

为什么是 0 而不是报错:SUM 遇到不认识的格子的处理方式是「跳过」,不是「抗议」。跳过是它的正常行为,跳完了照样返回一个数 —— 只不过这个数是 0。

怎么认出来

判据就一条:看绿三角,看对齐。

带绿三角、靠左站的,就是「数字存成了文本」。真数字靠右站。图 1 里 B2 到 B4 三格,也就是三行工时,全带绿三角。

怎么修

- 一格救急:=B2*1 或 =VALUE(B2)<br>- 一整列:选中 → 数据 → 分列 → 直接点「完成」,不选任何分隔符<br>- 已经粘进来的:复制一格空单元格 → 选中整列 → 选择性粘贴 → 加

⚠️ 一个容易被忽略的变种:从网页上复制来的数字,后面跟的可能是不间断空格(NBSP)。这种空格 TRIM 去不掉、CLEAN 也去不掉,实测两个都还你 #VALUE!。

修法:=SUBSTITUTE(A2,UNICHAR(0160),"")*1

>

(0160 就是 160,Excel 认前导零,别当成笔误。)

顺带说一句:网上流传的「用 CHAR(0160) 清 NBSP」,在中文 Excel 里实测指向的是普通空格(CODE(CHAR(0160)) 返回 32,不是 160),拿它去清 NBSP 是无效的。要清就用 UNICHAR。

03 第二种:日期存成了文本 —— 最阴的一种

这一节解决:为什么你按月份汇总,永远是 0。

先说结论:文本日期不是「完全不能用」,而是「大部分时候都能用,只在比大小的时候全废」。 这点最坑,因为前半句会让你放下戒心。

A1:C9。同一批日期,两种存法。按 10 月汇总,文本列给 0,日期列给 300

同一个 2026-10-01,存成文本,实测这些全正常:

- YEAR 取年份 → 2026<br>- MONTH 取月份 → 10<br>- DATEDIF 算天数 → 61<br>- 两个日期相减 → 30<br>- 精确匹配 COUNTIFS(...,"2026-10-01") → 1

看上去没毛病吧?但换成「按区间筛」:

- COUNTIFS 条件写 >=DATE(2026,10,1) → 0(同一批数据,日期格式列给 4)<br>- SUMIFS 按 10 月汇总 → 0(日期格式列给 300)

为什么:比较大小的时候,Excel 拿两个值直接比。日期格式的那个是真身,底层是数字 46296;文本格式的那个是字符串。字符串跟数字比大小,条件永远不成立 —— 不报错,只是一条都不匹配,汇总出来 0。

所以「按月份汇总」「按区间筛选」「条件格式标出逾期」「算某个时间段的天数」这一整类活儿,遇到文本日期全部静默归零。而「取年份」「算两个日期差」这类单点运算又都正常,你根本想不到是日期的问题。

⚠️ 这就是它比第一种更阴的地方:你随手抽一个公式验证,它是对的。

修法:

- 选中整列 → 数据 → 分列 → 第三步选「日期」→ YMD<br>- 或者 =DATEVALUE(A2),返回 46296 就是那一天的序列号

(2026.10.01 这种点号日期是另一回事,DATEVALUE 对它无效 —— 下一篇讲 #VALUE! 的时候会展开。)

04 还有两种「看着像算错了」

一是日期相减,结果显示 1900-01-30。

A1:B4。同样的 =B2-B1,上面那格还是日期格式,下面改成常规,就是 30

公式没错,结果也没错 —— 30 天。错的是单元格还带着日期格式:日期格式下,30 被当成序列号,从 1900 年 1 月 1 日数起,正好是 1900 年 1 月 30 日。

修法:右键 → 设置单元格格式 → 常规(或者数值)。

二是范围没盖住你的数据。

这一种连类型问题都没有,纯粹是范围写少了。假设 F 列四行金额是 100、200、300、400:

=SUM(F1:F4)
 得 1000

>

=SUM(F1:F3)
 得 600

少了一行,不报错,也不提示,就少 400。AI 是按你说的「四行」写的,可你的表要是早变成了五行,它不可能知道。

所以粘完公式,第一件事是点一下公式里的范围,看有没有盖到最后一个数据行。

05 三句话,让 AI 看见你的数据

回到根上:AI 看不见格子,只能靠你描述。那就把「它看不见、但会决定结果」的东西说进描述里。三句话,加起来不超过三十个字:

第一句,说格式。「B 列是文本格式的数字」比「B 列是数字」有用一百倍。它一听就知道要先转换,或者直接给你带 *1 的公式。

第二句,说有没有坑。 合并单元格、隐藏行、表头占了前两行、数据中间有空行 —— 这些都会让范围写错。

第三句,粘完自己验一遍。 两个公式就够:

=COUNT(B2:B100)
 数真数字,=COUNTA(B2:B100) 数非空格子

>

两个数一样 → 全是真数字,放心算。COUNT 明显小 → 里面有文本混着。

日期列同理:COUNT 会把真日期当成数字数进去,文本日期不算。两个数一比,就知道有没有文本混着。

最后

这一篇讲的几种情况,我整理成了一张排查卡,在公众号回复「报错」直接取,回复「0」也可以。

下一篇讲 #VALUE! —— 这篇里的「算出 0」,是 SUM 一声不吭跳过了;而 #VALUE! 是 Excel 直接拦下来说「这一格我不认」。同一件事的两张脸,一个喊出来,一个不吭声。那篇里有个反常识的结论,估计会推翻你在别处看到的说法。

相关学习资料