管理

Excel #N/A、#VALUE!、#REF!错误的原因与解决方法

本文在AI辅助下由原文翻译而成。请结合原文核对专业术语和公式。

Excel的每种错误值都对应一类具体问题:#N/A是查找函数没找到匹配项,#VALUE!是公式拿到了类型不对的数据(常见于文本或隐藏的空格),#REF!是被引用的单元格已经不存在,#DIV/0!是除数为0或为空,#NAME?是公式里有Excel不认识的字词。先查明原因再修复;只有错误在意料之中时(比如某个代码确实不在列表里),才用IFNA或IFERROR把它包起来。

八种Excel错误值速查图:#N/A找不到匹配项,#VALUE!数据类型不对,#REF!引用已被删除,#DIV/0!除以零,#NAME?无法识别的名称,#NUM!数值无效,#NULL!区域没有交集,#SPILL!溢出范围被占用,并分别标出第一步该检查什么
图1. 每种错误值都对应一类问题,所以错误代码本身就告诉你第一步该查什么。

Excel错误值速查表:8种错误一览

微软文档列出了7种经典错误值;在Microsoft 365和Excel 2021及更高版本的动态数组公式里,还有#SPILL!(中文版可能显示为#溢出!)。

错误值含义典型触发情况优先处理
#N/A没有可用的值查找值在区域里找不到查空格、类型、精确匹配
#VALUE!数据类型不对对文本或只含空格的单元格做运算清理单元格;用SUM代替+
#REF!单元格引用无效被引用的行或列已被删除先撤消,或重建引用
#DIV/0!除以零除数为0或为空先用IF判断除数
#NAME?无法识别的文本函数名拼错、文本缺引号、名称不存在改正拼写或补引号
#NUM!数值无效对负数开平方;IRR算不出结果修正输入,或换个估计值
#NULL!区域没有交集两个区域之间误用了空格改用冒号或逗号
#SPILL!结果无处存放溢出范围内的单元格不为空清除挡路的单元格

遇到难缠的情况,选中出错单元格,点击公式 > 公式审核 > 公式求值(Windows版Excel提供),可逐步展开公式,看清错误最先出现在哪一步。

#N/A:查找函数没有找到匹配项

用VLOOKUP、XLOOKUP、MATCH或XMATCH时,#N/A表示没有找到与查找值相等的内容。明明看得见这个值,多半是两边有肉眼看不出的差别,请按顺序排查:

  1. 隐藏的空格。末尾带空格的“A-102 ”不等于“A-102”。TRIM能去掉多余空格,却去不掉从网页复制时常带进来的不间断空格(字符代码160),先用SUBSTITUTE(A2,CHAR(160)," ")换成普通空格。
  2. 数字与文本不一致。数字1001与文本“1001”不匹配。文本型数字通常靠左对齐,单元格左上角带绿色小三角。转换其中一侧,让两边类型相同。
  3. 近似匹配。VLOOKUP省略最后一个参数时,默认按TRUE(近似匹配)处理,数据没排序就可能返回#N/A或错误的行。补上FALSE即可;XLOOKUP默认就是精确匹配。
  4. 确实不存在。代码根本不在表里,错误值说的就是实话。处理办法见下文IFNA一节。
四个小图说明查找函数返回#N/A的原因:A-102后面藏着一个空格、数字1001与文本1001不相等、VLOOKUP没有写FALSE而按近似匹配、代码A-205确实不在表里
图2. 查找函数对看得见的值返回#N/A时,先排除隐藏空格、数字与文本不一致、近似匹配这三种情况,再判断它是不是真的不存在。

#VALUE!与#NAME?:数据类型不对和无法识别的文本

#VALUE!出现在公式无法使用所给数据时。典型情形是对看似为空、其实含空格的单元格做算术运算。+和*这类运算符遇到文本会出错,SUM这类函数则会跳过文本,所以微软建议用=SUM(A2:C2),而不是=A2+B2+C2。公式求值能揪出元凶:隐藏的空格会显示为" "。

#NAME?表示你输入的内容Excel不认识,常见原因有:

  • 函数名拼错,如=VLOKUP(...)。从函数提示列表里选择可避免笔误。
  • 文本没加英文双引号:=IF(A2>B2,"超标","正常")能正常计算,漏掉“超标”两侧的引号就会出错。
  • 已定义的名称不存在或拼错,到公式 > 名称管理器核对。
  • 把含较新函数(如XLOOKUP)的工作簿拿到不支持它的旧版Excel中打开。

#REF!与#DIV/0!:引用丢失与除数为空

#REF!表示公式指向的单元格已不存在。微软示例:删除C列后,=SUM(B2,C2,D2)变成=SUM(B2,#REF!,C2)。立刻按Ctrl+Z就能找回这一列;来不及就重新输入出问题的引用。预防更省事:写成=SUM(B2:D2),删除区域内的某一列后,它会自动收缩为=SUM(B2:C2),照常工作。

删除C列前后的对比:=SUM(B2,C2,D2)结果为60,删除后变成=SUM(B2,#REF!,C2)并显示#REF!;而区域写法=SUM(B2:D2)会自动变成=SUM(B2:C2),结果为40
图3. 逐个单元格引用的公式在删除列之后会出现#REF!,区域引用则会自动调整(示例数字)。

VLOOKUP的列序号超过区域列数(如在4列区域里取第5列),或INDIRECT指向未打开的工作簿时,也会出现#REF!。

#DIV/0!表示除数为0或为空单元格,常见于未录入数据的行。先判断除数:=IF(C2,B2/C2,"")在C2为空或为0时保持空白,有了数值再做除法。AVERAGEIF在没有单元格满足条件时,也会返回#DIV/0!。

#NUM!、#NULL!与#SPILL!:较少见的三种

  • #NUM!:数值参数无效或找不到结果。=SQRT(-4)会返回它;IRR尝试20次仍找不到结果时也会返回它,微软建议换一个估计值(guess参数)再试。
  • #NULL!:两个引用之间的空格是“交叉运算符”。=SUM(A1:A5 C1:C5)求的是两个区域共有的单元格,而它们没有交集。不相连的区域用逗号:=SUM(A1:A5,C1:C5);连续的一整块用冒号。
  • #SPILL!:FILTER、UNIQUE、SORT等动态数组公式返回多个结果,却没地方放。多半是溢出范围里已有内容:点开出错单元格的警告图标,再点选择阻塞单元格即可定位。溢出公式放在Excel表格里、溢出到合并单元格上,或整列引用使结果超出工作表底部时,同样会出错。

IFERROR与IFNA:什么时候可以把错误藏起来

IFERROR(value, value_if_error)替换七种错误:#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?和#NULL!;IFNA(value, value_if_na)只替换#N/A。#SPILL!不在IFERROR的列表里,给被挡住的公式套外壳也不会腾出位置,所以应清理溢出范围。

假设有个名为“价格表”的4列区域,写出公式(示例)=IFERROR(VLOOKUP(A2,价格表,5,FALSE),0)。第5列根本不存在,每行却悄悄显示0,合计看上去依然正常。换成IFNA,#REF!会留在屏幕上,列序号也就能改对。

表格对比IFERROR与IFNA:IFERROR替换#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!七种错误,IFNA只替换#N/A;示例中IFERROR把#REF!变成0,IFNA则让它保持可见
图4. IFERROR会藏起七种错误,IFNA只藏#N/A。查找公式改用IFNA,真正的公式错误仍然看得见。

实用规则:

  1. 先把公式调通。微软提醒,笼统的错误处理会压下所有错误,而不只是你预料的那个。
  2. 查找公式用IFNA或XLOOKUP的if_not_found参数处理“未找到”,其他错误仍然可见。
  3. 显示“未找到”这类文字而不是0;0像真实数据,还会拉低平均值。
  4. IFERROR只留给展示用的单元格(任何错误含义都相同),套用前先测试公式。

常见问题

#####是错误吗?

不是公式错误。通常是列宽放不下数字或日期,拉宽即可;单元格里是负的日期或时间值时也会显示。

为什么只有同事的电脑显示#NAME?

对方的Excel多半不含工作簿用到的新函数。微软说明,较新的函数在早期版本中重新计算会返回#NAME?,换成旧版也有的函数,或用新版打开即可。

单元格左上角的绿色小三角是什么?

那是后台错误检查的提示,比如数字以文本形式存储、公式与相邻公式不一致,它并不是错误值。可在文件 > 选项 > 公式中逐条开关检查规则。

参考(Microsoft支持):检测Excel中的公式错误;如何更正#REF!错误;IFERROR函数;IFNA函数

相关阅读

为帮助理解本文而制作的原创插画。