大数跨境
0
0

运用Map()函数的四个案例

运用Map()函数的四个案例 Excel Plus---不止是Excel
2025-11-04
0
Map()函数也可以对数组进行遍历,它的基本语法如下:

对比此前的几个函数:

BYCOL是按进行遍历的迭代函数。

BYROW是按进行遍历的迭代函数。

SCAN是按单元格进行遍历的迭代函数,保留运算的中间值

REDUCE是按单元格进行遍历的迭代函数,只输出最终值的值。

MAP是数组内各个元素进行自上而下,自左而右进行遍历的的函数,可将多个数据重新映射为一个新值,它的特点是输出的数组同遍历的数组具有相同的行数,列数。以下通过4个案例来逐步理解该函数:


案例1:遍历数组,对于>4的,输出它的平方,小于等于4的,等于其本身。

=MAP(A1:C2,LAMBDA(x,IF(x>4,x*x,x)))

MAP函数对要遍历的数组进行自上而下,自左而右逐个运算。

这里要遍历的数组就是单元格区域A1:C2,Lambda中的变量x就对应于该数组中的各个值 。

案例2:分类汇总
这个是Groupby()函数的强项。

=GROUPBY(B1:B12,A1:A12,ARRAYTOTEXT,3,0)

当然也可以使用Map()函数,总的思路就是先将单元格区域B2:B12提取唯一值,然后将它作为一个数组进行遍历,每次遍历时,嵌套FILTER函数,筛选出等于某一部门(如“财务部”)的所有姓名,用TEXTJOIN将其连接在一起。每次遍历的结果进行纵向连接,再加上表头。


=VSTACK({"部门","姓名"},HSTACK(UNIQUE(B2:B12),      MAP(UNIQUE(B2:B12),LAMBDA(x,TEXTJOIN("、",TRUE,FILTER(A2:A12,B2:B12=x))))

))

案例3:依次提取单元格区域中每个单元格中的数值


=MAP(A1:D2,LAMBDA(x,-LOOKUP(1,-RIGHT(x,ROW(1:9)))))

这个公式的关键是 -LOOKUP(1,-RIGHT(x,ROW(1:9))),以x=西瓜75为例 ,用RIGHT函数嵌套ROW(1:9)将它分别截取9次,得到一个9行1列的数组,然后用LOOKUP去查找,它会返回这个数组中的最大的数字。

案例4:根据姓名统计个人在各个季度的销售额占个人总销售额的%
这个案例相对复杂 ,在MAP函数里面,LAMBDA里又嵌套了另外 一个LAMBDA。

=GROUPBY(A1:A13,C1:C13,VSTACK(

MAP({1,2,3,4},LAMBDA(x,LAMBDA(y,SUM(INDEX(y,x))/SUM(y)))),{1,2,3,4}&"季度"),

3,0)


参数x比较容易理解 ,它就对应着数组{1,2,3,4},变量y又是什么?
这里要组合GROUPBY函数来理解,GROUPBY是分类汇总,因此,这里的意思是根据不同的姓名提取的各个季度的销售额,
对于A来说,那就是{217,269,148,263},
对于B来说,那就是{262,228,200,151}
...
index(y,x),以姓名为A为例 ,y={217,269,148,263}
如果x=1 ,则index(y,x)就是提取个人销售额当中第1季度的数据,x=2就是提取第2季度的数据,依次类推。

SUM(INDEX(y,x))/SUM(y) 表示某个人某个季度的销售额占总销售额的占比。

【声明】内容源于网络
0
0
Excel Plus---不止是Excel
分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
内容 44
粉丝 0
Excel Plus---不止是Excel 分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
总阅读61
粉丝0
内容44