Menu

Excel IF 函数:公式、示例与常见错误

=IF(B2>=50,"Pass","Fail") 检查 B2 是否大于等于 50,是就返回 Pass,否则返回 Fail。本文讲解 IF 的语法、IF 判断文本、IF 搭配计算、判断单元格是否为空,以及让 IF 返回错误结果的常见错误。

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

=IF(B2>=50,"Pass","Fail") 检查 B2 中的分数是否大于等于 50。如果是,单元格显示 Pass;如果不是,显示 Fail。

及格还是不及格
C2
ABC
1StudentScoreResult
2Ana72Pass
3Ben45Fail
4Chloe50Pass
5Dan38Fail
6Eve91Pass
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

点击 C2 查看公式,然后把 B3 中 Ben 的分数改成 60:他的结果会变成 Pass。Chloe 正好是 50 分,而 >= 的意思是“大于等于 50”,所以她及格了。如果用 >,她就不及格。

IF 语法

=IF(logical_test, value_if_true, value_if_false)
  • logical_test 是任何能得出 TRUE 或 FALSE 的比较或公式:B2>=50、C2="Paid"、D2<TODAY()。
  • value_if_true 是条件为 TRUE 时单元格显示的内容。
  • value_if_false 是其他情况下显示的内容。它是可选的:省略它,条件不成立时单元格会显示 FALSE。如果保留逗号但参数留空,写成 =IF(B2>=50,"Pass",),则会显示 0。

每个结果都可以是带双引号的文本("Pass")、数字(0)、单元格引用(C2)或另一个公式。不加引号的文本会被当作名称读取,所以 =IF(B2>=50,Pass,Fail) 会得到 #NAME?。

比较运算符有 =(等于)、<>(不等于)、>、<、>= 和 <=。如果 Excel 设置的语言使用小数逗号,参数之间要用分号分隔:=IF(B2>=50;"Pass";"Fail")。Google 表格中的 IF 和参数完全相同。

IF 判断文本

条件可以把单元格和文本进行比较。文本要加双引号,比较时不区分大小写。

North 地区免运费
C2
ABCD
1OrderRegionFree deliveryExact case
21001NorthYesYes
31002SouthNoNo
41003northYesNo
51004EastNoNo
61005NORTHYesNo
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C 列对 North、north 和 NORTH 都显示 Yes,因为 = 不区分大小写。如果大小写有意义(产品代码、密码),就像 D 列那样改用 EXACT 判断:只有内容恰好是 North 的那一行得到 Yes。

要判断“不等于某个值”,用 <>:=IF(B2<>"North","Standard","Free")。要判断单元格中是否包含某个词,IF 需要搭配 SEARCH,IS 函数一文讲解了这种用法。

IF 搭配计算

IF 的结果不一定是文本。这里每位销售员的销售额超过 1,000 时可获得 5% 的奖金,不超过则没有:

超过 1,000 的奖金
C2
ABC
1RepSalesBonus
2Ana$1,400$70
3Ben$800$0
4Chloe$1,000$0
5Dan$2,600$130
6Eve$1,150$58
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Ana 得到 70(1,400的570(1,400 的 5%),Ben 得到 0。Chloe 正好卖了 1,000,而条件是“大于 1,000”,所以她也是 0。把C2的公式改成‘=IF(B2>=1000,B2∗50。把 C2 的公式改成 `=IF(B2>=1000,B2*5%,0)`,她的奖金就变成 50。

条件也可以比较两个单元格,例如 =IF(B2>C2,"Over target","Under target");或者把单元格和一个计算结果比较,例如 =IF(B2>AVERAGE($B$2:$B$6),"Above average","")。

IF 判断单元格是否为空

B2 为空时,B2="" 为 TRUE。用它跳过还没有数据的行,这样公式列就不会填满 0:

跳过没有数量的行
D2
ABCDE
1ItemQtyPriceTotalStatus
2Pens10$1.50$15.00Ordered
3Paper$4.20Not ordered
4Ink2$18.00$36.00Ordered
5Tape$2.80Not ordered
6Clips5$0.90$4.50Ordered
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

""(两个双引号,中间什么都没有)是空文本,所以 Paper 和 Tape 在 D 列中什么都不显示。在 B3 中输入数量,合计就会出现。E 列用 <>"" 判断相反的情况,即“不为空”。

内容为 ="" 的单元格看起来是空的,但对 ISBLANK 来说并不是空白。当其他公式读取这一列时,这个区别就很重要,例如 COUNTA 会把它算进去。

IF 判断两个条件

IF 只接受一个条件。要求两个条件同时成立,就在条件中放入 AND;两个条件满足其一即可,就用 OR:

=IF(AND(B2>=50,C2>=50),"Pass","Fail")
=IF(OR(B2="North",B2="South"),"Zone 1","Zone 2")

AND 和 OR 一文用实时示例讲解了这两种用法。如果有三种或更多可能的结果(A、B、C、F),就把一个 IF 嵌套在另一个 IF 里(嵌套 IF),或者使用 IFS。

练习:要不要补货

补货检查
D2
ABCD
1ItemStockMinimumStatus
2Pens1220
3Paper3025
4Tape1512
5Ink810
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 D2 中,当 B2 中的库存低于 C2 中的最低库存时显示 "Reorder",否则显示 "OK"。公式会向下填充到 D5。

10% 的奖金
C2
ABC
1RepSalesBonus
2Ana$1,250
3Ben$600
4Chloe$2,300
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 C2 中,当 B2 中的销售额超过 1000 时返回销售额的 10% 作为奖金,否则返回 0。公式会向下填充到 C4。

IF 的常见错误

给数字加了引号。 =IF(B2>"50","High","Low") 是把 B2 和文本“50”比较,而不是和数字 50 比较。Excel 认为所有数字都小于任何文本,所以无论 B2 中是什么数字,条件都是 FALSE,公式总是显示 Low。数字不要加引号:B2>50。

使用 ==。 Excel 的相等判断只用一个 =。输入 =IF(B2=="Paid","Yes","No"),Excel 会拒绝这个公式,并提示“此公式有问题”。

以文本形式存储的数字。 如果 B2 中是 '12(看起来像数字的文本,常见于导入的数据),B2>=50 就是在拿文本和数字比较。文本总是被当作更大,所以条件为 TRUE,12 也及格了。先把这一列转换成数字;方法见文本转数字一文。

把 TRUE 当作文本返回。 =IF(B2>=50,"TRUE","FALSE") 返回的是文本形式的单词,其他公式无法把它们当作逻辑值使用。如果你想要 TRUE 和 FALSE,根本不需要 IF:=B2>=50 会直接返回它们。

漏了右括号。 每个 IF 都会打开一个括号,需要有自己的 )。编辑时,Excel 会用不同的颜色显示每一对括号,所以漏掉的括号很容易发现。

常见问题

怎样在 Excel 中写 IF 条件公式?

写成 =IF(test, value_if_true, value_if_false)。例如 =IF(B2>=50,"Pass","Fail") 在 B2 大于等于 50 时显示 Pass,否则显示 Fail。文本结果要加双引号,数字和单元格引用不用。

为什么我的 IF 公式返回 FALSE?

你省略了第三个参数。=IF(B2>=50,"Pass") 在条件不成立时返回 FALSE。给这种情况加一个值,例如用 "" 显示空单元格:=IF(B2>=50,"Pass","")。

IF 函数区分大小写吗?

不区分。=IF(B2="North","Yes","No") 对 North、north 和 NORTH 都返回 Yes。要匹配大小写完全一致的文本,就用 EXACT 作为条件:=IF(EXACT(B2,"North"),"Yes","No")。

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

返回空文本,也就是两个双引号:=IF(B2="","",B2*C2) 在 B2 为空时什么都不显示,否则显示乘积。单元格里仍然有公式,所以对它使用 ISBLANK 会返回 FALSE。

IF 能同时判断多个条件吗?

能。在条件中放入 AND 或 OR,例如 =IF(AND(B2>=50,C2>=50),"Pass","Fail");如果结果超过两种,就把一个 IF 嵌套在另一个 IF 里。在 Excel 2019 及更高版本中,IFS 不用嵌套就能处理多种结果。

Coddy 编程语言插图

和 Coddy 一起学编程

开始