Menu

Excel LET 函数:给公式中的部分起名字

=LET(total,SUM(B2:B6),IF(total>500,total*0.9,total)) 只计算一次求和,把它命名为 total,再使用这个名称两次。LET 让长公式更短、更易读、也更快,因为每个命名的部分只计算一次。

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

=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))。

订单满 500 打九折
D2
ABCD
1OrderAmountTotal to pay
2A-101120580.5
3A-10295
4A-103210
5A-10480
6A-105140
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

订单合计为 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 时打九折:

每行的折扣
D2
ABCD
1ItemPriceQtyTo pay
2Pen2.51025
3Bag403108
4Lamp35270
5Mug815108
6Desk1501135
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

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%,商品不存在时返回一条提示:

查找一次,使用两次
F2
ABCDEF
1ProductRegionPriceLook forPrice + 20%
2AppleNorth1.2Pear1.8
3PearSouth1.5KiwiNot found
4CarrotEast0.8
5BreadNorth2.4
6MilkSouth1.1
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Pear 找到了,所以 F2 显示 1.8。Kiwi 不在列表中,XLOOKUP 返回作为第四个参数给出的空文本,F3 显示 Not found。在 A4 中输入 Kiwi,F3 就会变成它的价格加 20%。

LET 搭配 FILTER

LET 在动态数组中最有用,因为筛选出的区域往往要用到不止一次。下面的公式给匹配的行命名,统计行数,并计算它们的平均销售额:

一个地区的汇总
F2
ABCDEF
1NameRegionSalesRegionNorth
2AnnNorth120Summary3 reps, average 126.7
3BenSouth80
4CaraNorth200
5DanEast150
6EveSouth95
7FinnNorth60
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

North 显示“3 reps, average 126.7”。在 F1 中选择 South,就得到“2 reps, average 87.5”。INDEX(rows,0,3) 取筛选结果的第三列。不用 LET 的话,FILTER 就要写两次。

空出其他月份的月历

SEQUENCE 页面上的日历会显示相邻月份的日期。LET 给月初日期和日期网格命名,然后把不属于本月的日期都留空:

2026 年 4 月,其他月份留空
A2
ABCDEFG
1SunMonTueWedThuFriSat
21234
3567891011
412131415161718
519202122232425
62627282930
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

把 DATE(2026,4,1) 改成 DATE(2026,5,1),网格就会重新绘制成 5 月。因为月初日期只命名了一次,所以只需要改一个日期,而不是三个。

练习:用 LET 计算运费

轮到你了
D2
ABCD
1OrderAmountTo pay
2A-101120
3A-10295
4A-103210
5A-10480
6A-105140
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 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,它只计算一次,结果会被重复使用。

Coddy 编程语言插图

和 Coddy 一起学编程

开始