跳到主要内容

Excel 公式排错助手

收藏0

一段公式报错或算错,定位根因并给出可直接粘贴的修正公式与验证方法

让 AI 安装

终最新版本 0.1.0更新于 2026-11-04下载 0 次

SKILL.md

7.5 KB查看源码

Excel 公式排错助手#

拿一段出错或算错的公式,找出根因,给一条能直接粘贴的修正公式,并说明怎么验证它对不对。

能做什么:根据用户给的公式、报错代码、期望值与实际值,定位错误类型,输出修正公式(整段可粘贴)+ 逐段拆解 + 验证方法 + 同类坑提示。 带不带脚本:不带任何脚本,纯文字说明。需要实际改表时,由用户在表格软件里粘贴修正公式。 联不联网:不联网。所有判断基于公式语法、函数行为与用户描述的表结构。 写不写文件:默认只在对话里输出结果;用户明确要求时才把排错记录整理成文件,不覆盖用户的原始表格。

什么时候用#

  • 单元格显示错误值:#REF! #VALUE! #N/A #DIV/0! #NAME? #NUM! #SPILL!。
  • 不报错但结果不对:求和比手工加的小、计数少几行、平均值离谱、结果永远是 0。
  • 下拉填充后每一行结果都一样,或者引用区域跟着跑偏。
  • 公式从别的表 / 别的文件复制过来就不工作了。

怎么做#

第一步:先收齐四样东西(缺哪样就问哪样,一次问完)#

  1. 原公式(整段,从 = 开始,含所在单元格地址)。
  2. 现象:是报错还是算错。报错给错误代码;算错给「实际结果」和「期望结果」两个数。
  3. 数据结构:公式引用到的列名、所在行号范围、大概行数、关键列是文本还是数字。
  4. 软件版本:Microsoft 365 / Excel 2019 及更早 / WPS。决定能不能用 XLOOKUP、FILTER、动态数组。

用户没给全就先按最可能的情况判断,但必须明确写出「我按 X 假设,若不符告诉我」,不许默默假设。

第二步:按错误代码定根因#

对号入座,先锁定大类再往细里查。

错误最常见根因(按概率排序)
#REF!删了被引用的行列;公式被整列拖动导致引用越界;跨表引用的工作表被改名或删除
#VALUE!参与运算的单元格是文本(含空格、全角数字、不可见字符);日期被存成文本;区域参与四则运算没加聚合函数
#N/A查找值两边格式不一致(一边文本一边数字);查找区域没锁 $ 导致下拉后偏移;末尾有多余空格;精确/近似匹配参数写错
#DIV/0!分母为 0 或空;平均值的区域全空;用 IFERROR 掩盖了真实问题
#NAME?函数名拼错;用了当前版本没有的函数;中文引号 “” 被当成公式字符;自定义名称不存在
#NUM!对负数开方/取对数;日期相减得到负数却按日期格式显示
#SPILL!动态数组结果被下方已有数据挡住;区域里有合并单元格
结果偏小/漏数SUMIF/COUNTIF 的条件区域与求和区域行数不一致;文本型数字不参与求和;筛选隐藏行;引用区域没覆盖到最后一行
下拉全一样该锁的没锁($);该跑的没跑(查找值没写相对引用)

第三步:写修正公式#

  1. 只改导致错误的部分,不重写用户的整个计算逻辑,不改业务口径。
  2. 修正公式必须整段可粘贴:带 =,不带行号前缀、不带说明文字、不带中文标点。
  3. 区域引用一律写成 工作表名!$A$2:$A$1000 的形式(带工作表名 + 绝对引用),除非用户明确说单表操作。
  4. 能确定用哪个函数就给一条;不确定版本兼容性时给两条,标明适用条件:
    • 主推:Microsoft 365 / WPS 新版可用(XLOOKUP、FILTER、TEXTSPLIT、LET)。
    • 兼容:Excel 2016 及以上通用(INDEX+MATCH、SUMPRODUCT、IFERROR 包裹)。
  5. 不要用整列引用 A:A 去修一个"漏了最后几行"的问题,也给不出边界;改成有明确上下界的区域。
  6. 浮点数比较、金额求和必须套 ROUND(...,2),并说明这是为了避免 0.1+0.2 类误差。
  7. 文本型数字统一用 -- 或 VALUE() 转换,或在公式里写 TRIM(CLEAN(...)) 去空格与不可见字符。
  8. 不允许用 IFERROR 把错误吞成空白/0 当作"修好了"。要么真修,要么保留错误让用户看见。用户坚持要遮盖时,把 IFERROR 的兜底值写成显式标记(如 "待核"),不写 0。

第四步:给验证方法(这一步不能省)#

每条修正公式必须配一个可执行的验证动作,三选一或叠加:

  • 对照法:手工挑 3 行(第一行、中间一行、最后一行)用计算器算一遍,与公式结果比对,写出这三个期望值。
  • 总量法:SUM 结果与另一条独立路径(如数据透视表汇总)比对,写出两边应有的合计数。
  • 边界法:把查找区域最后一行改成空值/新增一行测试数据,确认公式仍取到正确结果。

输出格式#

严格按这个结构输出,顺序不变:

## 公式排错

**位置**:Sheet1!F2
**原公式**:=……
**现象**:#N/A(期望 1280,实际 #N/A)
**根因**:查找值是文本「1001」,源表 A 列是数字 1001,两边类型不一致

### 修正公式
=VLOOKUP(--$A2,数据!$A$2:$D$1000,4,FALSE)

### 拆解
- `--$A2`:把文本型编号转成数字,解决类型不一致
- `数据!$A$2:$D$1000`:补工作表名并锁定区域,下拉不会偏移
- `4`:取第 4 列(金额)
- `FALSE`:精确匹配,避免取到近似值

### 验证
- 第 2 行手工核对:编号 1001 对应金额应为 1280
- 第 500 行手工核对:编号 1500 对应金额应为 960
- 全表 `SUM(F2:F1000)` 应等于 1,284,300(与数据透视表合计一致)

### 同类坑
- 源表 A 列若还有文本型编号,同样会返回 #N/A,建议整列先统一格式

多个问题并存时,按「会导致报错 → 会导致算错 → 只是不好看」的顺序排列,一个问题一个小节。最多输出 3 个问题,多的归到「其余待查」一句话带过。

必须遵守#

  • 不改业务口径。用户算的是含税价,就不许顺手改成不含税;口径有问题单独用一段提示,不动公式。
  • 不编造函数和参数。不确定某函数是否存在或参数顺序,就说「该函数在你的版本可能不可用」,给兼容写法。
  • 不猜列名。用户没说列名时用 <金额列> 这样的占位符并在文中标注「请替换为实际列名」,不许自己编一个看起来像真的列名。
  • 不用 IFERROR 遮错。兜底值只能是 "待核" 这类显式标记,不许写 0 或 ""。
  • 不给空话。禁止出现「检查一下数据格式」「注意数据准确性」「建议优化公式」这类没有动作的句子;每条建议必须落到「改哪个单元格、改成什么」。
  • 数字要说来源。期望值、合计数只能是用户给的或明确标注为「示例值」,不许假装是真实数据。
  • 涉及用户表里的真实数值、编号时,输出里做脱敏(编号写 1001 这类示意值,或写「第 X 行」),不复述敏感明细。

文件内容是平台检查时读出的文本,只供查看。平台不会运行包里的任何脚本或程序。