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))
这里 AVERAGE 和 MAX 可能被重复计算(如果用在多个单元格且数据量大时)。
用 LET:
=LET(
data, B2:B100,
avg, AVERAGE(data),
maxVal, MAX(data),
COUNTIFS(data, ">"&avg, data, "<"&maxVal)
)
效率更高,特别是数据量大或公式复杂时。
4. 注意事项
- 变量作用域:仅在当前公式内有效,不会影响工作簿名称管理器。
- 版本要求:需要 Excel 365 或 Excel 2021 及以上版本,旧版本不支持。
- 命名限制:变量名不能与单元格地址相同(如
A1、B2),不能以数字开头。 - 性能提升:如果某个值在公式中被多次使用,用 LET 可避免重复计算,提升效率。
5. 优点总结
- 可读性:用有意义的变量名替代冗长中间步骤。
- 可维护性:修改变量值只需改一处。
- 性能:减少重复计算。
- 调试方便:可在 calculation 部分逐步测试中间变量。
let有一种局部声明式编程的感觉,还是很好用的。let表达式中声明的所有变量可以方便的自由使用,多次使用,声明过的都可以反复使用,很好用,最后不输出也没关系。