目录
- 一. LET函数
- 1.1 简介
- 1.2 基本用法
- 1.3 实战
- 1.3.1 案例1
- 1.3.2 案例2
- 二. LAMBDA函数
- 2.1 简介
- 2.2 基本用法
- 2.3 共享自定义公式给其他用户
- 2.4 实战
- 2.4.1 LAMBDA 配合 LET 使用
- 2.4.2 字符串处理
- 三. MAP函数
- 3.1 简介
- 3.2 基本用法
- 3.3 MAP 和 BYROW 的区别
- 四. FILTER
- 4.1 简介
- 4.2 根据多条件进行筛选
- 4.3 实战
- 4.3.1 `FILTER` 配合 `LET` 使用
- 4.3.2 模糊包含
- 4.3.3 过滤出5的倍数
一. LET函数
1.1 简介
🔷在 LET 出现之前,Excel 很多复杂公式都会:
- 重复计算
- 很难读
- 很难维护
- 性能差
🔷而 LET 可以像编程语言一样:
- 定义变量
- 给变量命名
- 重复使用中间结果
- 让公式更清晰
🔷当有下面的情况发生的时候,应该考虑使用LET:
- 一个表达式重复出现
- 公式太长,看不懂
- 想提高性能
- 有多个中间步骤
🔷LET 的基本语法
=LET(变量名1,值1,变量名2,值2,...最终返回值)1.2 基本用法
🔷定义变量
- 使用let之前,
A1+B1被计算了2次
=(A1+B1)*2+(A1+B1)*3- 使用let之后,
A1+B1的计算结果被放到了x变量中,A1+B1只需要计算1次就可以了。
=LET(x,A1+B1,x*2+x*3)🔷中间结果调试
- 下面是想要得到的效果,最后想要获取y的值
=LET(x,A1+A2,y,x*2,y)- 可以先将终将变量x先输出,得到中间定义变量的值,便于debug
=LET(x,A1+A2,y,x*2,x)1.3 实战
1.3.1 案例1
🔷假设A1单元格中有如下内容,现在要求对该内容进行如下操作
- 拆分
- 去重
- 排序
- 再拼接
apple,banana,apple,orange,banana🔷不使用LET的话,可读性较差
=TEXTJOIN(",",TRUE,SORT(UNIQUE(TEXTSPLIT(A1,","))))🔷使用了LET之后,可读性更高
=LET(arr,TEXTSPLIT(A1,","),uniqueArr,UNIQUE(arr),sortedArr,SORT(uniqueArr),TEXTJOIN(",",TRUE,sortedArr))1.3.2 案例2
=LET(name,TEXTBEFORE(A2:A3,","),scores,--TEXTSPLIT(TEXTAFTER(A2:A3,","),","),total,BYROW(scores,LAMBDA(r,SUM(r))),avg,BYROW(scores,LAMBDA(r,AVERAGE(r))),id,SEQUENCE(ROWS(name)),VSTACK({"序号","姓名","总分","平均分"},HSTACK(id,name,total,avg)))二. LAMBDA函数
2.1 简介
🔷基本语法结构
=LAMBDA(参数1,参数2,...,计算公式)🔷LAMBDA相当于其他编程语言中的匿名函数,核心作用是在 Excel 中自定义函数。
需要注意的是LAMBDA本身本身不会执行,必须要被调用之后才会执行。
- 只是定义了一个
LAMBDA函数,并没有调用,显示计算错误
- 定义了
LAMBDA函数,并且调用
LAMBDA函数支持多个参数
2.2 基本用法
🔷LAMBDA函数的最重要的点就是:把复杂公式封装起来
=LAMBDA(score,IF(score>=90,"A",IF(score>=80,"B",IF(score>=60,"C","D"))))- 【公式】选项卡,找到【名称管理器】
- 然后就将自定义的
LAMBDA函数粘贴到【引用位置】处 - 最后再给
LAMBDA函数取一个名字,就完成了自定义函数的构建
- 然后就可以使用自定义函数了
2.3 共享自定义公式给其他用户
🔷使用LAMBDA函数自定义的公式,只会在当前Excel中起作用。
如果同时定义了很多自定义函数,其他人想要使用很多自定义函数的话,就要手动一个个导入,很耗费时间。
🧐解决办法
新建一个Excel文件,然后通过【名称管理器】定义若干个自定义函数
将Excel文件另存为
.xlam格式,将该文件共享给其他用户其他用户将
.xlam格式的文件存放到C:\Users\用户名\AppData\Roaming\Microsoft\AddIns文件夹中然后如下图所示,通过Excel的【加载项】找到对应的
.xlam文件名,然后激活即可激活之后,当前用户的所有的Excel就都可以使用自定义的公式了
2.4 实战
2.4.1 LAMBDA 配合 LET 使用
🔷语法规则
=LAMBDA(参数,LET(变量1,值1,变量2,值2,...最终返回值))🔷根据成绩,计算该成绩对应的等级
// ▶版本1=LAMBDA(score,LET(grade,CHOOSE(1+(score>=60)+(score>=80)+(score>=90),"D","C","B","A"),grade))// ▶版本2=LAMBDA(score,LET(isA,score>=90,isB,score>=80,isC,score>=60,grade,CHOOSE(1+isC+isB+isA,"D","C","B","A"),grade))🔷计算添加消费税和折扣之后的商品价格的函数
=LAMBDA(price,tax,LET(subtotal,price*tax,discount,subtotal*0.9,ROUND(discount,2)))2.4.2 字符串处理
- 假设
text的内容为:banana, apple,apple,orange - 被
LAMBDA处理之后就会变为:apple,banana,orange
=LAMBDA(text,LET(arr,TEXTSPLIT(text,","),clean,TRIM(arr),uniqueArr,UNIQUE(clean),sortedArr,SORT(uniqueArr),TEXTJOIN(",",TRUE,sortedArr)))三. MAP函数
3.1 简介
🔷MAP函数是Excel新增的动态数组函数之一,主要用来对数组中的每个元素执行一次自定义计算,和下面语言的map用法有点像:
- JavaScript 的
Array.map() - Python 的
map() - Java Stream 的
map - PowerShell 的
ForEach-Object
🔷Excel的MAP函数通常会搭配下面的函数一起使用
- LAMBDA
- LET
- BYROW
- BYCOL
🔷基本语法
array1: 第一个数组array2: 第二个数组(可选)LAMBDA: 对每个元素执行的逻辑a,b:对应数组中的当前元素
=MAP(array1,[array2],...,LAMBDA(a,b,...,计算逻辑))3.2 基本用法
- A1到B5单元格区域内的每个单元格的数据都乘2
=MAP(A1:B5,LAMBDA(x,x*2))🔷MAP还支持多个数组一起处理
- 两个数组相加
=MAP(A1:A5,B1:B5,LAMBDA(a,b,a+b))3.3 MAP 和 BYROW 的区别
- MAP是逐元素处理,会对所指定区域内的每一个单元格都进行处理。
=MAP(A1:C3,LAMBDA(x,x*2))- BYROW逐行处理,会对指定区域内的每一整行都进行处理。
=BYROW(A1:C3,LAMBDA(r,SUM(r)))四. FILTER
4.1 简介
🔷FILTER函数的作用是:根据条件,从数据区域中筛选出符合条件的数据。
array:要筛选的数据区域include:筛选条件(TRUE/FALSE)[if_empty]:没有结果时返回什么
=FILTER(array,include,[if_empty])- 筛选出分数 >= 90 的人
=FILTER(A2:B5,B2:B5>=90)
4.2 根据多条件进行筛选
🔷*代表 和
- 分数 >=90 且 姓名是李四
=FILTER(A2:B5,(B2:B5>=90)*(A2:A5="李四"))
🔷+代表 或
- 分数 >=90 或 分数 <=60
=FILTER(A2:B5,(B2:B5>=90)+(B2:B5<=60))
🔷当没有符合条件的数据时,会报错,因此一般建议添加第三个参数
4.3 实战
4.3.1FILTER配合LET使用
FILTER配合LET使用,可以提高公式的可读性- 避免重复计算
- 性能更好
=LET(data,A2:B5,score,B2:B5,FILTER(data,score>=90))4.3.2 模糊包含
🔷查找包含東的数据
SEARCH找位置ISNUMBER判断是否找到
=LET(data,A1:A4,FILTER(data,ISNUMBER(SEARCH("東",data))))4.3.3 过滤出5的倍数
=LET(data,A1:A6,FILTER(data,MOD(data,5)=0))