问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Excel函数之MAP:语法详解与实战案例

创作时间:
作者:
@小白创作中心

Excel函数之MAP:语法详解与实战案例

引用
CSDN
1.
https://blog.csdn.net/Leonlsf/article/details/139613741

Excel中的MAP函数是一个非常强大的工具,它允许用户对数组中的每个元素进行自定义的函数运算,并生成一个新的数组。本文将详细介绍MAP函数的语法、作用,并通过多个实际案例展示其具体应用。

MAP函数详解

语法

MAP(array, [arrar2], ……, lambda(value,[value2], ……, calculation))

  • array:需要进行映射的数组,可以有多个
  • value:数组中的每个值,每次取一个值,每个 array 按顺序对应一个 value
  • calculation:设定的计算处理逻辑

注:多个数组的形状大小尽可能保持一致,否则将出现错误值

作用

  • 依次将数组中的每个值放入lambda中进行函数运算,最终形成一个和原数组形状大小一样的新的数组

图示

案例

  1. 计算成绩是否合格
  • 根据成绩列的平均分判断是否合格
=MAP(C24:C33,LAMBDA(x,IF(AVERAGE(--TEXTSPLIT(x,","))>=60,"合格","不合格")))
// 公式详解
=MAP(
    C24:C33,         //需要进行映射的数组
    LAMBDA(
        x,             //数组中的每个值
        // 1.用TEXTSPLIT函数对成绩单元格中的内容进行拆分
        // 2.用"--"将拆分后的数据转化为数值
        // 3.计算拆分后数组的平均值
        // 4.根据平均值结果是否">=60"判断合格于否
        IF(AVERAGE(--TEXTSPLIT(x,","))>=60,"合格","不合格")
    )
)
  1. 列出合格人员的姓名
  • 根据是否合格筛选出对应人员姓名
=MAP(B24:B33,D24#,LAMBDA(x,y,IF(y="合格",x,"")))
// 公式详解
=MAP(
    B24:B33,       // 数组1,姓名
    D24#,          // 数组2,是否合格
    LAMBDA(
        x,           // 姓名中的每个值
        y,           // 是否合格中的每个值
        IF(y="合格",x,"")   // 判断是否合格,是则取出对应的姓名,否则置空
    )
)
  1. 生成指定大小的随机计算题
  • array指定数组大小,但不直接参与运算
=MAP(SEQUENCE(10,4),LAMBDA(x,CONCAT(RANDBETWEEN(10,50),"+",RANDBETWEEN(10,50),"=")))
// 公式详解
=MAP(
    SEQUENCE(10,4),      // 利用SEQUENCE函数指定最终输出数组的大小为10行4列
    LAMBDA(
        x,                 // 数组中的每个值,不参与下方逻辑处理
        // 1.用RANDBETWEEN函数生成2个10到50间的随机数
        // 2.用CONCAT函数进行数据拼接,形成计算题
        CONCAT(RANDBETWEEN(10,50),"+",RANDBETWEEN(10,50),"=")
    )
)
  1. 模糊筛选(双层MAP嵌套)
  • 根据指定英文名进行模糊筛选
=MAP(B4:B9,LAMBDA(z,TEXTJOIN(,TRUE,MAP($M$4:$M$5,LAMBDA(y,IF(ISNUMBER(SEARCH(y,z)),z,""))))))
// 公式详解
=MAP(
    B4:B9,          // 外层循环数组Data
    LAMBDA(
        z,            // Data中的每个值
        // 由于每个Data被内层find_text匹配了2遍,故用TEXTJOIN进行合并,否则公式报错
        TEXTJOIN(     
            ,
            TRUE,       // 字符串合并忽略空值
            MAP(
                M4:M5,    // 内层循环数组find_text
                LAMBDA(
                    y,      // find_text中的每个值
                    // 1.查找Data值是否包含find_text中的值
                    // 2.如包含则返回位置的数值,此时用ISNUMBER判断返回值是否为数值
                    // 3.如为真,则返回Data值,否则返回空
                    IF(ISNUMBER(SEARCH(y,z)),z,"")
                )
            )
        )
    )
)

  1. 计算移动平均
  • 利用映射单元格的属性,计算近3天移动平均
=MAP(C56:C68,LAMBDA(x,AVERAGE(OFFSET(x,-2,,3))))
=MAP(
    C56:C68,       // 需要进行映射的数组
    LAMBDA(
        x,           // 数组中的每个值
        // 1.用OFFSET将当前映射单元格向上偏移2行并获取3行的区域
        // 2.计算移动平均值
        AVERAGE(OFFSET(x,-2,,3))
    )
)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号