=LET(total,SUM(B2:B6),IF(total>500,total*0.9,total)) 对 B2:B6 只求和一次,把结果命名为 total,然后使用这个名称两次:一次用来判断,一次用来返回。不用 LET 的话,SUM 要写三次:=IF(SUM(B2:B6)>500,SUM(B2:B6)*0.9,SUM(B2:B6))。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Amount | Total to pay | |
| 2 | A-101 | 120 | 580.5 | |
| 3 | A-102 | 95 | ||
| 4 | A-103 | 210 | ||
| 5 | A-104 | 80 | ||
| 6 | A-105 | 140 |
订单合计为 645,超过了 500,所以 D2 显示 580.5。把 B4 改成 50,合计降到 485,低于门槛,D2 就显示不打折的 485。
LET 语法
=LET(name1, value1, [name2, value2, ...], calculation)
- 每个
name是你自己取的一个词,后面跟着它所代表的value:一个数字、一个区域或一个公式。 - 最多可以定义 126 对。一个值可以使用在它之前定义的任何名称。
- 最后一个参数是
calculation,它使用这些名称并给出结果。
LET 需要 Excel 2021、Excel 2024 或 Microsoft 365。在 Excel 2019 及更早版本中会显示 #NAME?。Google 表格也有 LET,语法相同。
在 LET 中使用多个变量
有了名称,逐行计算的公式读起来就像一句话。这里每一行先算出小计,超过 100 时打九折:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Item | Price | Qty | To pay |
| 2 | Pen | 2.5 | 10 | 25 |
| 3 | Bag | 40 | 3 | 108 |
| 4 | Lamp | 35 | 2 | 70 |
| 5 | Mug | 8 | 15 | 108 |
| 6 | Desk | 150 | 1 | 135 |
Bag 的 120 变成 108,Mug 的 120 也变成 108,Desk 的 150 变成 135;Pen(25)和 Lamp(70)保持不变。公式写在 D2 中并向下填充,subtotal 在每一行代表不同的数字。
一个名称可以建立在前一个名称之上:=LET(x,2,y,x*3,x+y) 把 x 设为 2,y 设为 6,返回 8。
只查找一次,重复使用结果
在 IF 中出现两次的查找会执行两次。LET 只执行一次。下面返回价格加 20%,商品不存在时返回一条提示:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Region | Price | Look for | Price + 20% | |
| 2 | Apple | North | 1.2 | Pear | 1.8 | |
| 3 | Pear | South | 1.5 | Kiwi | Not found | |
| 4 | Carrot | East | 0.8 | |||
| 5 | Bread | North | 2.4 | |||
| 6 | Milk | South | 1.1 |
Pear 找到了,所以 F2 显示 1.8。Kiwi 不在列表中,XLOOKUP 返回作为第四个参数给出的空文本,F3 显示 Not found。在 A4 中输入 Kiwi,F3 就会变成它的价格加 20%。
LET 搭配 FILTER
LET 在动态数组中最有用,因为筛选出的区域往往要用到不止一次。下面的公式给匹配的行命名,统计行数,并计算它们的平均销售额:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Region | Sales | Region | North | |
| 2 | Ann | North | 120 | Summary | 3 reps, average 126.7 | |
| 3 | Ben | South | 80 | |||
| 4 | Cara | North | 200 | |||
| 5 | Dan | East | 150 | |||
| 6 | Eve | South | 95 | |||
| 7 | Finn | North | 60 |
North 显示“3 reps, average 126.7”。在 F1 中选择 South,就得到“2 reps, average 87.5”。INDEX(rows,0,3) 取筛选结果的第三列。不用 LET 的话,FILTER 就要写两次。
空出其他月份的月历
SEQUENCE 页面上的日历会显示相邻月份的日期。LET 给月初日期和日期网格命名,然后把不属于本月的日期都留空:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
| 2 | 1 | 2 | 3 | 4 | |||
| 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 5 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 6 | 26 | 27 | 28 | 29 | 30 |
把 DATE(2026,4,1) 改成 DATE(2026,5,1),网格就会重新绘制成 5 月。因为月初日期只命名了一次,所以只需要改一个日期,而不是三个。
练习:用 LET 计算运费
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Amount | To pay | |
| 2 | A-101 | 120 | ||
| 3 | A-102 | 95 | ||
| 4 | A-103 | 210 | ||
| 5 | A-104 | 80 | ||
| 6 | A-105 | 140 |
轮到你了: 在 D2 中对 B2:B6 中的金额求和。合计低于 800 时加上 25 的运费,否则返回合计。
LET 命名规则和错误
LET 的错误大多出在名称上:
- 名称必须以字母开头,不能包含空格。
unit price不行,请用unit_price或unitPrice。 - 名称不能看起来像单元格地址。
a1和tax2026在 Excel 中都是单元格地址(TAX 是一个列),所以 LET 会用 #NAME? 拒绝它们。rate或tax_2026可以使用。 - 名称每次使用时的拼写必须完全一致。使用处有拼写错误会得到 #NAME?,因为 Excel 会去找同样拼写的函数或命名区域。
- 最后一个参数必须是一个计算。
=LET(x,5)有名称和值,却没有要返回的内容,所以 Excel 不接受它。 - 名称只在自己所在的公式内部有效。要在许多单元格中重复使用一个计算,请把它保存为命名的 LAMBDA。
=LET(a1,5,a1*2) #NAME? (a1 is a cell address)
=LET(rate,8%,100*rate) 8
常见问题
Excel 中的 LET 函数有什么用?
它在一个公式内部给值起名字。=LET(total,SUM(B2:B6),total*2) 只计算一次 SUM(B2:B6),把它叫作 total,然后返回 total 乘以 2。这些名称只在这个公式内部有效。
怎样在 LET 中使用多个变量?
在最后的计算之前加上更多的名称和值:=LET(price,B2,qty,C2,price*qty)。后面的值可以使用前面的名称,例如 =LET(x,2,y,x*3,x+y) 返回 8。
我的 LET 公式为什么返回 #NAME??
可能是你的 Excel 没有 LET(它需要 Excel 2021 或 Microsoft 365),或者使用名称时拼错了,或者名称不被允许,例如看起来像单元格地址的 a1 或 tax2026,或者以数字开头的名称。
LET 能让 Excel 公式更快吗?
可以。不用 LET 时,重复出现的表达式(例如在 IF 中写了两次的同一个 XLOOKUP)每出现一次就计算一次。用了 LET,它只计算一次,结果会被重复使用。