遍历多个数组!6个MAP函数高阶用法,EXCEL数据处理一招搞定!

遍历多个数组传递参数!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逐行传递进行处理。

原文链接:,转发请注明来源!