Menu

Excel IFERROR 函数:替换 #N/A 和 #DIV/0!(附 IFNA)

=IFERROR(B2/C2,0) 返回 B2/C2 的结果,除法出错时返回 0。本文讲解 IFERROR 搭配 VLOOKUP、出错时返回空白、为什么查找时 IFNA 是更好的选择,以及为什么掩盖所有错误可能会藏住真正的问题。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=IFERROR(B2/C2,0) 返回 B2/C2 的结果,结果出错时返回 0。第一个参数是你想要的公式;第二个参数是在该公式产生任何错误时改为显示的内容。

单价
E2
ABCDE
1ProductRevenueUnitsPlainWith IFERROR
2Pens$12080$1.50$1.50
3Paper$30050$6.00$6.00
4Ink$900#DIV/0!$0.00
5Tape$4530$1.50$1.50
6Clips$00#DIV/0!$0.00
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Ink 和 Clips 的数量是 0,所以 D 列中的普通除法显示 #DIV/0!。E 列对它们显示 $0.00,其他每一行都显示正常的单价。在 C4 中输入 15,两列都会显示 Ink 的单价。

IFERROR 语法

=IFERROR(value, value_if_error)
  • value 是要计算的公式。
  • 当 value 是任何错误时,返回 value_if_error:#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!,以及 #CALC! 这类较新的错误。
  • 如果 value 不是错误,IFERROR 会原样返回它。

替换值可以是数字(0)、文本("Not found")、空文本("")或另一个公式,例如在另一张表中再查找一次:=IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),VLOOKUP(E2,G2:I6,3,FALSE))。

IFERROR 搭配 VLOOKUP

值不在表格中时,查找公式会返回 #N/A。用 IFERROR 包住它,就能改为显示一条提示:

查找价格
F2
ABCDEF
1ProductCategoryPriceLook forPrice
2AppleFruit$1.20Pear$1.50
3PearFruit$1.50KiwiNot found
4CarrotVegetable$0.80Milk$1.10
5BreadBakery$2.40
6MilkDairy$1.10
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Kiwi 不在列表中,所以 F3 显示 Not found。在 A4 中把 Carrot 改成 Kiwi,F3 就能找到它。如果用 XLOOKUP,就不需要 IFERROR 来做这件事,因为它的第四个参数就是“找不到”时的值:=XLOOKUP(E2,A2:A6,C2:C6,"Not found")。

IFNA:只捕获 #N/A

IFNA 的用法和 IFERROR 一样,但只替换 #N/A。对于查找来说,这通常正是你想要的:#N/A 表示“找不到”,这是正常的结果;而其他任何错误都说明公式本身写错了。在这个表格中,公式要求返回一张三列表格的第 4 列,这是个笔误:

IFERROR 掩盖了笔误,IFNA 把它显示出来
F2
ABCDEFG
1ProductCategoryPriceLook forIFERRORIFNA
2AppleFruit1.2PearNot found#REF!
3PearFruit1.5
4CarrotVegetable0.8
5BreadBakery2.4
6MilkDairy1.1
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Pear 明明在表格中,F2 却显示 Not found:IFERROR 把错误列号导致的 #REF! 变成了和找不到产品时一样的提示。G2 让 #REF! 显示出来,你就能看出公式坏了。把 G2 中的 4 改成 3,它会返回 1.5。IFNA 需要 Excel 2013 或更高版本。

出错时返回空白

如果什么都不想显示,就把空文本(两个双引号)作为替换值:

出错时显示空白的增长率
D2
ABCD
1MonthLast yearThis yearGrowth
2Jan20024020%
3Feb0150
4Mar180171-5%
5Apr90
6May25030020%
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

2 月和 4 月去年没有销售额,所以无法计算增长率,单元格保持空白。其他月份显示 20%、负 5% 和 20%。内容为 "" 的单元格里是文本:SUM 和 AVERAGE 会跳过它,但 =D3*2 会得到 #VALUE!。如果后面的公式要对这一列做算术运算,就改为返回 0。

练习:带备用值的查找

库存查询
F2
ABCDEF
1ProductStockLook forStock
2Apple40Kiwi
3Pear25
4Carrot60
5Bread12
6Milk30
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 F2 中,从 A2:B6 里查找 E2 中产品的库存;产品不在列表中时,显示 "Not found"。

为什么掩盖所有错误可能会藏住问题

IFERROR 并不能修复任何东西,它只决定单元格显示什么。在用它包住公式之前:

  1. 先弄清楚为什么会出错。 如果是 Units 单元格为空导致了 #DIV/0!,真正的解决办法可能是让人把数据填上,而不是显示一个为零的单价。
  2. 查找时优先使用 IFNA,这样错误的列号(#REF!)、拼错的名称(#NAME?)或数字列中的文本(#VALUE!)仍然会显示出来。
  3. 做除法时只检查特定的情况。 =IF(C2=0,0,B2/C2) 只处理除数为零的情况;如果 B2 中的引用错了,仍然会显示对应的错误。#DIV/0! 错误一文比较了这两种做法。
  4. 选一个不会被误认为数据的替换值。 价格列中的 0 看起来像真实的价格,还会拉低平均值;"" 或 "Not found" 则不会。

最后再包上 IFERROR:等公式在本该正常计算的行上给出正确结果之后。

常见问题

怎样把 IFERROR 和 VLOOKUP 一起使用?

把查找公式包起来:=IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),"Not found")。当 E2 不在第一列中时,单元格显示 Not found 而不是 #N/A。=IFNA(VLOOKUP(E2,A2:C6,3,FALSE),"Not found") 效果相同,而且仍会显示其他错误。

怎样让 IFERROR 返回空白单元格?

把空文本作为第二个参数:=IFERROR(B2/C2,"")。单元格看起来是空的,但里面是文本,所以对它使用 =D2+1 会得到 #VALUE!;SUM 和 AVERAGE 会跳过它。

IFERROR 和 IFNA 有什么区别?

IFERROR 会替换所有错误:#N/A、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM! 和 #NULL!。IFNA 只替换 #N/A,也就是查找时的“找不到”,其他错误照常显示,这样公式写错了也不会被掩盖。

怎样在 Excel 中把 #N/A 替换成 0?

用 IFNA 包住公式,把 0 作为替换值:=IFNA(VLOOKUP(E2,A2:C6,3,FALSE),0)。XLOOKUP 的第四个参数本身就是替换值:=XLOOKUP(E2,A2:A6,C2:C6,0)。

哪些 Excel 版本有 IFERROR 和 IFNA?

IFERROR 从 Excel 2007 开始提供,IFNA 从 Excel 2013 开始提供。在旧文件中你可能会看到 =IF(ISERROR(B2/C2),0,B2/C2),它的作用和 IFERROR 相同,但会把公式计算两次。

Coddy 编程语言插图

和 Coddy 一起学编程

开始