=IF(B2>=50,"Pass","Fail") 检查 B2 中的分数是否大于等于 50。如果是,单元格显示 Pass;如果不是,显示 Fail。
| A | B | C | |
|---|---|---|---|
| 1 | Student | Score | Result |
| 2 | Ana | 72 | Pass |
| 3 | Ben | 45 | Fail |
| 4 | Chloe | 50 | Pass |
| 5 | Dan | 38 | Fail |
| 6 | Eve | 91 | Pass |
点击 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 判断文本
条件可以把单元格和文本进行比较。文本要加双引号,比较时不区分大小写。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Region | Free delivery | Exact case |
| 2 | 1001 | North | Yes | Yes |
| 3 | 1002 | South | No | No |
| 4 | 1003 | north | Yes | No |
| 5 | 1004 | East | No | No |
| 6 | 1005 | NORTH | Yes | No |
C 列对 North、north 和 NORTH 都显示 Yes,因为 = 不区分大小写。如果大小写有意义(产品代码、密码),就像 D 列那样改用 EXACT 判断:只有内容恰好是 North 的那一行得到 Yes。
要判断“不等于某个值”,用 <>:=IF(B2<>"North","Standard","Free")。要判断单元格中是否包含某个词,IF 需要搭配 SEARCH,IS 函数一文讲解了这种用法。
IF 搭配计算
IF 的结果不一定是文本。这里每位销售员的销售额超过 1,000 时可获得 5% 的奖金,不超过则没有:
| A | B | C | |
|---|---|---|---|
| 1 | Rep | Sales | Bonus |
| 2 | Ana | $1,400 | $70 |
| 3 | Ben | $800 | $0 |
| 4 | Chloe | $1,000 | $0 |
| 5 | Dan | $2,600 | $130 |
| 6 | Eve | $1,150 | $58 |
Ana 得到 0。Chloe 正好卖了 1,000,而条件是“大于 1,000”,所以她也是 50。
条件也可以比较两个单元格,例如 =IF(B2>C2,"Over target","Under target");或者把单元格和一个计算结果比较,例如 =IF(B2>AVERAGE($B$2:$B$6),"Above average","")。
IF 判断单元格是否为空
B2 为空时,B2="" 为 TRUE。用它跳过还没有数据的行,这样公式列就不会填满 0:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Item | Qty | Price | Total | Status |
| 2 | Pens | 10 | $1.50 | $15.00 | Ordered |
| 3 | Paper | $4.20 | Not ordered | ||
| 4 | Ink | 2 | $18.00 | $36.00 | Ordered |
| 5 | Tape | $2.80 | Not ordered | ||
| 6 | Clips | 5 | $0.90 | $4.50 | Ordered |
""(两个双引号,中间什么都没有)是空文本,所以 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。
练习:要不要补货
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Item | Stock | Minimum | Status |
| 2 | Pens | 12 | 20 | |
| 3 | Paper | 30 | 25 | |
| 4 | Tape | 15 | 12 | |
| 5 | Ink | 8 | 10 |
轮到你了: 在 D2 中,当 B2 中的库存低于 C2 中的最低库存时显示 "Reorder",否则显示 "OK"。公式会向下填充到 D5。
| A | B | C | |
|---|---|---|---|
| 1 | Rep | Sales | Bonus |
| 2 | Ana | $1,250 | |
| 3 | Ben | $600 | |
| 4 | Chloe | $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 不用嵌套就能处理多种结果。