跳转至

LET 函数

函数概述

LET 函数用于在公式内部定义变量并复用这些变量的计算结果,从而让公式更易读、可维护,并在重复计算较多时提升计算效率。它特别适合把“很长的中间结果”“重复出现的表达式”“复杂条件分支”先命名,再在最终表达式中引用。

常见用途包括:

  • 复用重复计算(例如同一个筛选结果、同一个范围统计)
  • 将长公式拆成“命名步骤”,提升可读性
  • 让公式更易修改(只改变量定义即可)

基础语法

=LET(name1, value1, [name2, value2], …, calculation)

语法要点:

  • 变量以“名称 + 值”成对出现:name1, value1
  • 最后一个参数必须是最终计算表达式 calculation
  • 变量名在 LET 作用域内有效,可在后续的 value 或 calculation 中引用

参数说明

参数 类型 是否必需 说明
name1 文本/名称 必需 第一个变量名(建议用有含义的名字)
value1 任意表达式 必需 name1 对应的值或计算表达式
name2, value2… 名称+表达式 可选 可继续定义更多变量,后定义的可引用前定义的
calculation 表达式 必需 最终返回结果的计算表达式,可引用前面所有变量

补充说明(实用规则):

  • 变量名不区分大小写(例如 xX 视为同名)
  • 变量名不能与同一 LET 内已有变量重复(重复会导致后续引用混淆或报错)
  • value 可以是常量、单元格引用、函数结果、数组结果等

基础用法示范

示例1:给中间结果命名

需求:计算“数量 × 单价 × (1-折扣)”,让公式更清晰。 假设:数量在 A2,单价在 B2,折扣在 C2。

=LET(qty, A2, price, B2, disc, C2, qty*price*(1-disc))

思路:

  • qty/price/disc 分别命名
  • 最后一段只做最终表达式,阅读成本更低

示例2:避免重复计算

需求:求 A2:A100 的平均值,并计算每个值与平均值的差(仅返回差的总和示例)。 普通写法可能会把 AVERAGE(A2:A100) 写很多次。

=LET(avg, AVERAGE(A2:A100), SUM(A2:A100-avg))

要点:

  • avg 只算一次
  • 后面直接复用,提高可读性与性能(尤其在大型表格中更明显)

示例3:配合IF写“可维护”的条件逻辑

需求:根据分数判断等级:

=90 为 A,>=80 为 B,>=60 为 C,否则 D。分数在 A2。

1
2
3
4
5
6
7
=LET(s, A2,
 IF(s>=90,"A",
  IF(s>=80,"B",
   IF(s>=60,"C","D")
  )
 )
)

优化点:

  • 只引用一次 A2,后续统一用 s
  • 以后分数来源变更(例如改成 B2)只需改一处

示例4:配合动态数组(FILTER)复用结果

需求:筛选“部门=销售”的员工姓名并统计人数。 假设:姓名在 A2:A100,部门在 B2:B100,销售条件为“销售”。

1
2
3
=LET(list, FILTER(A2:A100, B2:B100="销售"),
     HSTACK(list, ROWS(list))
)

说明:

  • list 是筛选后的姓名列表(动态溢出数组)
  • ROWS(list) 统计筛选结果行数
  • HSTACK 将“名单”和“人数”并排输出(人数会重复显示在每行右侧,若只想单独显示人数,可改为只返回 ROWS(list)

仅返回人数的写法:

=LET(list, FILTER(A2:A100, B2:B100="销售"), ROWS(list))

总结

LET 的核心价值是:在公式内部“先命名、再计算”。它能把复杂公式拆成清晰步骤,减少重复计算,并显著提升可维护性。实际写作建议:

  • 变量名尽量语义化(如 avgqtysalesList
  • 先定义“重的计算/重复的表达式”,最后用 calculation 输出最终结果
  • 与 IF、FILTER、XLOOKUP 等函数搭配时,LET 往往能把公式质量提升一个等级