=AND(B2>=50,C2>=50) 只有在两个条件都成立时才返回 TRUE。=OR(B2>=50,C2>=50) 只要至少有一个成立就返回 TRUE。放进 IF 中,它们能把两个条件合成一个判断:=IF(AND(B2>=50,C2>=50),"Pass","Fail")。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Student | Exam | Project | Both 50+ | Either 50+ |
| 2 | Ana | 72 | 64 | Pass | Pass |
| 3 | Ben | 45 | 80 | Fail | Pass |
| 4 | Chloe | 58 | 51 | Pass | Pass |
| 5 | Dan | 38 | 42 | Fail | Fail |
| 6 | Eve | 91 | 47 | Fail | Pass |
Ben 和 Eve 一部分通过、另一部分没通过,所以他们在 D 列(AND)中不及格,在 E 列(OR)中及格。Dan 两部分都没通过,两列都不及格。把 B3 中 Ben 的考试成绩改成 55,他在 D 列也会及格。
AND 函数
=AND(logical1, [logical2], ...)
AND 最多接受 255 个条件,只有当每个条件都为 TRUE 时才返回 TRUE。只要有一个 FALSE,结果就是 FALSE。单独使用时,AND 在单元格中显示 TRUE 或 FALSE;放在 IF 中,它决定 IF 返回哪个结果。
判断数字是否在两个值之间
Excel 没有 BETWEEN 函数。用 AND 加上下限和上限来判断:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Sample | Temp | Between 10 and 20 | Status |
| 2 | S1 | 14 | TRUE | OK |
| 3 | S2 | 22 | FALSE | Check |
| 4 | S3 | 10 | TRUE | OK |
| 5 | S4 | 7 | FALSE | Check |
| 6 | S5 | 20 | TRUE | OK |
S3 和 S5 正好落在边界上,算作在范围内,因为判断用的是 >= 和 <=。要排除边界,就用 > 和 <。把边界放在单元格中,写成 =AND(B2>=$F$1,B2<=$F$2),修改范围时就不用改公式。像 10<=B2<=20 这样的判断在 Excel 中行不通:它先算出 10<=B2(TRUE 或 FALSE),再把结果和 20 比较,而 Excel 认为 TRUE 和 FALSE 比任何数字都大,所以结果总是 FALSE。
OR 函数
=OR(logical1, [logical2], ...)
只要至少有一个条件为 TRUE,OR 就返回 TRUE;只有所有条件都为 FALSE 时才返回 FALSE。它是接受多个文本值的常用方法:
| A | B | C | |
|---|---|---|---|
| 1 | Order | Region | Zone |
| 2 | 1001 | North | Zone 1 |
| 3 | 1002 | East | Zone 2 |
| 4 | 1003 | South | Zone 1 |
| 5 | 1004 | West | Zone 2 |
| 6 | 1005 | south | Zone 1 |
文本比较不区分大小写,所以小写的 south 也会归入 Zone 1。如果可接受的值很多,=OR(B2={"North","South","Central"}) 会一次性把 B2 和数组常量中的每一项进行比较。
NOT 和 XOR
NOT 把逻辑值取反:=NOT(TRUE) 是 FALSE。当你手上的条件正好和想要的相反时,用它读起来很顺:=IF(NOT(C2="Done"),"Follow up","") 和 =IF(C2<>"Done","Follow up","") 效果相同。
XOR 从 Excel 2013 开始提供,表示“异或”:有两个条件时,恰好一个为 TRUE 时返回 TRUE,两个都为 TRUE 或都为 FALSE 时返回 FALSE。条件更多时,为 TRUE 的条件个数是奇数时返回 TRUE。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Task | Owner | Status | Open | One check only |
| 2 | Report | Ana | Done | FALSE | FALSE |
| 3 | Budget | Ben | Open | TRUE | FALSE |
| 4 | Slides | Ana | Open | TRUE | TRUE |
| 5 | Survey | Ben | Done | FALSE | TRUE |
| 6 | Plan | Ana | Done | FALSE | FALSE |
E 列对 Slides(是 Ana 但不是 Done)和 Survey(是 Done 但不是 Ana)为 TRUE,对两个条件都满足或都不满足的行为 FALSE。
AND 和 OR 一起使用
条件可以嵌套:AND 放在 OR 里,或者 OR 放在 AND 里。销售代表在 North 区域,并且销售额超过 1,000 或签下了新客户时,就能拿到奖金:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Rep | Region | Sales | New client | Bonus |
| 2 | Ana | North | 1200 | No | Bonus |
| 3 | Ben | North | 700 | Yes | Bonus |
| 4 | Chloe | South | 1500 | Yes | |
| 5 | Dan | North | 900 | No | |
| 6 | Eve | North | 1100 | Yes | Bonus |
Ana(销售额)、Ben(新客户)和 Eve(两者都满足)拿到奖金。Chloe 满足 OR 部分,但她在 South 区域;Dan 在 North 区域,但两个 OR 条件都不满足。
练习:免运费
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Total | Member | Shipping |
| 2 | 1001 | 35 | Yes |
轮到你了: 在 D2 中,如果 B2 中的订单总额至少为 50,或者顾客是会员(C2 为 "Yes"),就显示 "Free",否则显示 "Paid"。
数组公式中的 AND 和 OR:用 * 和 +
AND 和 OR 会把传给它们的所有内容归结为一个 TRUE 或 FALSE。在单行中这正是你想要的,但当公式要一次处理整列时就不行了:=AND(B2:B6="North",C2:C6>100) 对五行一起只返回一个值。在数组公式(FILTER、SUMPRODUCT、对条件求 SUM)中,把每个条件写在括号里,AND 用相乘,OR 用相加。TRUE 按 1 计算,FALSE 按 0 计算,所以只有两个条件都成立时乘积才是 1,而只要任一条件成立,和就至少为 1。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rep | Region | Sales | Count | ||
| 2 | Ana | North | 1200 | North and over 1,000 | 2 | |
| 3 | Ben | South | 700 | North or over 1,000 | 4 | |
| 4 | Chloe | North | 900 | |||
| 5 | Dan | South | 1500 | |||
| 6 | Eve | North | 1100 |
F2 统计出 2 行(Ana 和 Eve),F3 统计出 4 行(除 Ben 以外的所有人)。在 F3 中,>0 很关键:同时满足两个条件的行相加得 2,而这个比较会把任何大于 0 的和都变成一个 TRUE。同样的写法也能筛选行,=FILTER(A2:C6,(B2:B6="North")*(C2:C6>1000));如果只是按 AND 逻辑计数,COUNTIFS 不用数组就能做到:=COUNTIFS(B2:B6,"North",C2:C6,">1000"),见 COUNTIFS 页面。
常见问题
如何在 Excel 中把 IF 和 AND 搭配使用?
把 AND 放进 IF 的判断条件中:=IF(AND(B2>=50,C2>=50),"Pass","Fail")。只有当 B2 和 C2 都大于或等于 50 时,结果才是 Pass。
如何在 Excel 中判断一个数字是否在两个值之间?
用 AND 加两个比较:=AND(B2>=10,B2<=20) 对 10 到 20 之间(含两端)的任何值都返回 TRUE。放进 IF 中:=IF(AND(B2>=10,B2<=20),"In range","Out of range")。
Excel 中 AND 和 OR 有什么区别?
AND 只有在所有条件都为 TRUE 时才返回 TRUE。OR 只要至少有一个条件为 TRUE 就返回 TRUE。=AND(TRUE,FALSE) 是 FALSE,=OR(TRUE,FALSE) 是 TRUE。
为什么 AND 在我的 FILTER 或 SUMPRODUCT 公式中不起作用?
AND 和 OR 会把整个区域归结为一个 TRUE 或 FALSE,而不是每行一个。在数组公式中,AND 用条件相乘表示,(B2:B6="North")*(C2:C6>100),OR 用条件相加表示。
可以在同一个公式中同时使用 AND 和 OR 吗?
可以,把一个嵌套在另一个里面:=IF(AND(B2="North",OR(C2>1000,D2="Yes")),"Bonus","") 要求区域是 North,并且销售额超过 1000 或 D2 中是 Yes。