遍历多个数组传递参数!6个MAP函数高阶用法,EXCEL数据处理一招搞定!
场景1:A 列为带有美元符号的价格(如 $100, $200),需要批量转换为纯数字。
公式:
=MAP(A2:A10,LAMBDA(x,--(SUBSTITUTE(x,"$",""))))
解析:
SUBSTITUTE(x,"$",""):去除美元符号
--():将文本转换为数字
MAP 会逐行处理 A2:A10 的每个单元格,对应LAMBDA函数中的x。
也可以用SCAN处理:
=SCAN("",A2:A10,LAMBDA(x,y,VALUE(SUBSTITUTE(y,"$",""))))
SCAN与MAP计算都会返回每步计算结果,区别在于SCAN第一参数为初始值,而MAP无初始值,MAP还能传递多个参数。
结果都相当于公式:
=--(SUBSTITUTE(A2:A10,"$",""))。
场景2:根据A 列数据判断是否优秀(80及以上)。
公式:
=MAP(A1:A9,LAMBDA(x,IF(x>=80,"优秀","一般")))
解析:
IF(...),如果大于或等于80为"优秀",否则返回"一般";
MAP逐行传输递A1:A9进行计算。
场景3:A 列为数量,B 列为单价,需要计算每行的总金额。
公式:
=MAP(A2:A10,LAMBDA(a,a*OFFSET(a,,1)))
解析:
同时引用 A 列和 B 列作为输入数组
通过 LAMBDA(a, ...) 定义参数进行乘法运算,OFFSET(a,,1) 表示向右偏移1列;
相当于公式:
=A2:A10*B2:B10
场景4:将 A 列(姓名)、B 列(部门)、C 列(工号)合并为 姓名-部门(工号) 格式。
公式:
=MAP(A2:A10, B2:B10, C2:C10, LAMBDA(a,b,c, a & "-" & b & "(" & c & ")"))
解析:
LAMBDA(a,b,c, a & "-" & b & "(" & c & ")"),定义三个参数,“a & "-" & b & "(" & c & ")”为计算表达式;
MAP逐行进行处理。
场景5:根据销售数据(客户类型:金额),动态生成评级。
规则:
金额 ≥15000 且为 "VIP1" → "S级"
金额 ≥12000 且为 "VIP2" → "S级"
金额 ≥10000→ "A级"
其他情况→ "B级"
公式:
=MAP(TEXTBEFORE(A2:A9,":"),--TEXTAFTER(A2:A9,":"),LAMBDA(X,Y,IF(OR(AND(X="VIP1",Y>=15000),AND(X="VIP2",Y>=12000)),"S级",IF(Y>=10000,"A级","B级"))))
解析:
MAP逐行将拆分得到的数组“TEXTBEFORE(A2:A9,":")”、“--TEXTAFTER(A2:A9,":")”传递进行逻辑判断,返回评级。
场景6:A 列为混合文本(如 "质量:90;效率:85;创新:70"),需要解析每个维度的分数,并根据权重表(质量 40%,效率 30%,创新 30%)计算加权总分。
公式:
=MAP(A2:A10,LAMBDA(a,LET(X,REGEXP(a,"-?\d+\.?\d*",0),INDEX(X,,1)*0.4+INDEX(X,,2)*0.3+INDEX(X,,3)*0.3)))
解析:
REGEXP(...)提取出混合文本中的数据
INDEX(X,,1)*0.4表示第1列质量数据乘以权重0.4得到对应分数,再加上效率分数、创新分数,最终得到加权总分。
MAP逐行传递进行处理。