excel表达式中的let语法

15 阅读3分钟

excel表达式中的let有一种局部声明式编程的感觉,还是很好用的。let表达式中声明的所有变量可以方便的自由使用,多次使用,声明过的都可以反复使用,很好用,最后不输出也没关系。

之前从没深入使用过Excel,然而工作中用到了表格处理,学习浪费了很长时间,因此在这里记录一下。

在Excel中,LET函数 用于定义变量(名称)并在公式中重复使用,从而简化复杂公式、提高可读性和计算效率


1. 语法

=LET(name1, value1, [name2, value2], …, calculation)
  • name1:变量的名称(不能是单元格引用或数字开头)。
  • value1:分配给该变量的值或表达式。
  • 可以定义多个变量(最多 126 对名称/值)。
  • calculation:使用已定义变量进行计算的最终表达式。

2. 主要用途

(1)避免重复计算,提高效率

例如:用公式提取字符串的姓和名,并合并成“姓,名”格式。

不用 LET(重复使用 LEFT 和 RIGHT):

=LEFT(A1, FIND(" ", A1)-1) & "," & RIGHT(A1, LEN(A1)-FIND(" ", A1))

这里 FIND(" ", A1) 出现了两次,Excel 会计算两次。

用 LET

=LET(
    fullName, A1,
    spacePos, FIND(" ", fullName),
    firstName, LEFT(fullName, spacePos-1),
    lastName, RIGHT(fullName, LEN(fullName)-spacePos),
    firstName & "," & lastName
)

spacePos 只计算一次,公式更清晰。


(2)让复杂公式更易读

例如:判断一个数值是否在某一范围内,并返回文字说明。

普通公式(较难直接理解中间部分):

=IF(AND(A1>=80, A1<=100), "优秀", IF(AND(A1>=60, A1<80), "合格", "不合格"))

使用 LET

=LET(
    score, A1,
    isExcellent, AND(score>=80, score<=100),
    isPass, AND(score>=60, score<80),
    IF(isExcellent, "优秀", IF(isPass, "合格", "不合格"))
)

变量名直接表达含义,便于维护。


3. 实际案例

案例1:提取括号内的文本

A1 单元格内容:"产品A (型号123)"
目标:提取 型号123

用 LET

=LET(
    text, A1,
    openPos, FIND("(", text),
    closePos, FIND(")", text),
    MID(text, openPos+1, closePos-openPos-1)
)

案例2:多条件统计

统计区域 B2:B100 中大于平均值且小于最大值的个数。

不用 LET

=COUNTIFS(B2:B100, ">"&AVERAGE(B2:B100), B2:B100, "<"&MAX(B2:B100))

这里 AVERAGEMAX 可能被重复计算(如果用在多个单元格且数据量大时)。

用 LET

=LET(
    data, B2:B100,
    avg, AVERAGE(data),
    maxVal, MAX(data),
    COUNTIFS(data, ">"&avg, data, "<"&maxVal)
)

效率更高,特别是数据量大或公式复杂时。


4. 注意事项

  1. 变量作用域:仅在当前公式内有效,不会影响工作簿名称管理器。
  2. 版本要求:需要 Excel 365 或 Excel 2021 及以上版本,旧版本不支持。
  3. 命名限制:变量名不能与单元格地址相同(如 A1B2),不能以数字开头。
  4. 性能提升:如果某个值在公式中被多次使用,用 LET 可避免重复计算,提升效率。

5. 优点总结

  • 可读性:用有意义的变量名替代冗长中间步骤。
  • 可维护性:修改变量值只需改一处。
  • 性能:减少重复计算。
  • 调试方便:可在 calculation 部分逐步测试中间变量。

let有一种局部声明式编程的感觉,还是很好用的。let表达式中声明的所有变量可以方便的自由使用,多次使用,声明过的都可以反复使用,很好用,最后不输出也没关系。