龙空技术网

Excel新函数MAP函数基础应用篇

ExcelWps应用实例分享 214

前言:

如今咱们对“map数组赋值”大致比较看重,姐妹们都想要了解一些“map数组赋值”的相关文章。那么小编也在网上网罗了一些有关“map数组赋值””的相关文章,希望你们能喜欢,小伙伴们一起来了解一下吧!

MAP函数是excel365新版本新增的函数之一,它是LAMBDA的好搭档,它的作用是将所选区域中的每一个数作为参数进行对应的函数或公式运算,即通过LAMBDA来创建新值,返回将数组中每一个值映射到新值而形成的数组。

它的基本语法如下:

=MAP(数组,数组或LAMBDA自定义表达式1,数组或LAMBDA自定义表达式2,……数组或LAMBDA自定义表达式n)

数组:就是要映射的数组;

LAMBDA:为最后一个计算参数,并且必须具有传递的每个数组的参数,或者必须有另一个要映射的数组。

第1参数是数组,第2—n个参数是数组或LAMBDA表达式。函数按照从上到下,从左到右的顺序,遍历数组中的每个元素,执行LAMBDA表达式,最后返回和源数组尺寸相同的结果数组。

举个简单的例子,如下图所示:

这是一张成绩表,现在要对每个人每科成绩是80分以上的筛选出来,下面通过MAP函数来实现:

MAP函数的解法如下:

=MAP(C2:E6,LAMBDA(x,IF(x>=80,x,"")))

MAP函数第1参数是C2:E6,MAP函数从上到下,从左到右依次遍历数组中的每一个元素,也就是C2/D2/E2/C3……/E6,每个元素执行LAMBDA表达式,判断每个元素是否在80分以上,如果是原数返回,且返回一个和源数组尺寸相等的结果数组5行3列,即返回和C2:E6区域相等的区域。需要注意的是,MAP函数的计算规则,当数组有多个时,它们的尺寸大小必须一致,不然按照数组运算规则,会导致配对元素缺失,而产生错误值。当数据源为引用时,MAP函数也会保留引用的特性。

LAMBDA表达式第1参数属于定义名称x,指向第1个数组中每个被遍历的元素,第2参数是IF(x>=80,x,"")判断表达式,对每个元素进行判断,如果是80分以上就返回该值,否则就是返回""空值。

公式返回结果如下图所示:

实战案例

MAP函数最常用的场景是将计算结果作为内存数组的形式,传递给其它函数,即它只是一个计算过程,而非最终结果。

1.提取单元格内混合字符中的纯数字

如上图所示,A1:D3区域的数据有汉字和数字混合,需要从混合字符中提取所有的数字出来。

及参考公式如下:

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

MAP函数遍历A1:D3区域每个元素,并执行LAMBDA表达式,因此就得到了想要的数据。x为A1:D3区域中的每个元素,也就是每个单元格都执行-LOOKUP(1,-RIGHT(x,ROW(1:9)))这个计算公式。结果如下图所示:

2.拆分字符串后统计

如上图所示,B2:B11单元格内有多个姓名,不同人姓名间用逗号“,”分隔。现在需要统计B2:B11单元格区域每个姓名出现的次数。

MAP函数参考解法如下:

=LET(a,TEXTSPLIT(TEXTJOIN(",",,B2:B11),,{",",","}),m,UNIQUE(a),VSTACK({"序号","名称","次数"},HSTACK(SEQUENCE(COUNTA(m)),m,MAP(m,LAMBDA(c,COUNTA(FILTER(a,a=c)))))))

第2行代码a,TEXTSPLIT(TEXTJOIN(",",,B2:B11),,{",",","}),使用TEXTJOIN函数把B2:B11区域用逗号隔开“,”后连成一行字符到一个单元格内,再通过TEXTSPLIT函数拆分为一列,并赋值变量a。运行结果如下图:

第3行代码m,UNIQUE(a),是使用UNIQUE函数对第2行代码变量去重,并赋值变量m。

运行结果如下图:

SEQUENCE(COUNTA(m))是对COUNTA(m)统计m的结果进行构造行序列。运行结果如下图所示:

MAP(m,LAMBDA(c,COUNTA(FILTER(a,a=c))))是,对姓名的出现次数进行统计汇总。公式运行结果如下图所示:

HSTACK函数是把序号、姓名、次数横向堆叠起来,运行结果如下图所示:

VSTACK函数是对"序号","名称","次数"进行纵向堆叠,运行结果如下图所示:

3.求下往上最近3个数的和

如上图所示,需要求有每个人最近3次的数字之和。

即参考公式如下:

=MAP(B2:B13,LAMBDA(x,LET(s,FILTER(C2:x,B2:x=x),IF(ROWS(s)>2,SUM(TAKE(s,-3)),""))))

结果如下图所示:

4.多行每个元素替换多个关键字形成内存数组

如上图所示,要把A列中的ABCDE替换为F列的内容。

即参考公式如下:

=MAP(A2:A7,LAMBDA(x,REDUCE(x,E2:E6,LAMBDA(x,y,SUBSTITUTE(x,y,VLOOKUP(y,E2:F6,2,0))))))

结果如下图所示:

5.提取每个单元格中最大值。

如上图,提取单元格内最大值。

即参考公式如下:

=MAP(B2:E6,LAMBDA(x,MAX(--TEXTSPLIT(x,,","))))

结果如下图所示:

6.单元格内非数字填充为0

如上图,每个人的各科成绩中有显示错误或汉字或空白的单元格,现在对这些非数值的单元格填充为0值,以让其他函数可以对数值进行应用。

即参考公式如下:

=MAP(B2:E6,LAMBDA(x,IF(ISNUMBER(x),x,0)))

结果如下图所示:

以上仅是MAP函数基础应用的部份实例,它主要是遍历数组中的每个元素。

标签: #map数组赋值 #怎么取出map中的值