REDUCE函数这个用法真的妙不可言!

职场   教育   2024-10-30 11:10   江苏  

今天的需求非常简单,也是很多老师常用的一个问题,借着这个问题,我们一起交流一下REDUCE第二参数的数组化用法,知识点密集,请做好笔记!


▍需求说明

A到D列每三行一组,对应的一个学生的各科成绩,中间间隔一行,由于科目不同,老师登记采用的每人一行的登记方法!

现在想整理成右侧二维结果,方便查看分析数据!


▍思路要点

想要做成二维结果,主要还是标题的问题,我们需要想办法获取全部科目及第一列的姓名。这个只要筛选第一列是姓名的行,然后提取唯一值即可,比如下面这样!

① 提取科目作为标题行

第一步:先使用FILTER函数,筛选出每个人的科目!


第二步:转一行,去掉空白单元格
TOROW函数,去掉空白,同时转成一行,方便后续作为顶端的标题!


第三步:提取唯一值
这个直接使用UNIQUE函数即可!注意这里是一行数据,要给第二参数1

▼提取标题成功
=UNIQUE(TOROW(FILTER(A1:D8,A1:A8="姓名"),3),1)
至此,你已成功了搞定了第一大步-提取全部科目作为标题!

下面的问题,就是如何在各组登记的数据中查找对应科目的数据,不存在,容错处理成空值即可!

② 提取成绩


我们先来简单演示一下,单个学生的数据提取
这个大家应该都是OK的,直接使用刚处理好的标题,作为HLOOKUP函数第一参数进行查询,IFNA容错处理,查询不到就会返回#NA错误,IFNA第二参数,填写出错后想要显示的内容,这里是空字符,显示空白!



下面逻辑比较简单,也就是逐个迭代处理,然后上下追加到一起即可!但是对新手来讲不熟悉REDUCE函数有点难度,同时我们用一下参数数组化

▍核心构建

下面我们看一下核心的部分构建,显示就是循环部分如果获取,方法很多,本次我们想用OFFSET函数把每个部分作为一个整体参与REUDCE循环!
=OFFSET(A1:D2,{0,3,6},)
看结果返回错误,其实他们对应的是3个人的数据,是一个二维的平面区域,无法直接显示,但是事实确实不影响后续调用!


▼每个区域是一个整体
=DROP(
    REDUCE("",OFFSET(A1:D2,{0,3,6},),
        LAMBDA(x,y,VSTACK(x,IFNA(HLOOKUP(F1#,y,2,),"")))
    )
,1)

避免过多的干扰,我们暂时不把标题处理部分添加进来,上面的公式,REDUCE函数的第二参数,用的OFFSET部分,一共循环了3次,每次是一个学生的2行多列数据,作为HLOOKUP的第二参数直接查询,也能说明这点!

一般来说,REDUCE第二参数如果是一个单元格区域,或按照先行后列的方式逐个元素循环,但是如果给一个多维数组,每个数组就是一个独立的元素!这点,关键时候可以简化公式!



▍最终公式

最后我们整合一下上面的分析,给出最后的公式,为了方便大家理解,我们使用中文定义名称!


▼长了点,可以看格式化部分
=LET(标题,UNIQUE(TOROW(FILTER(A1:D8,A1:A8="姓名"),3),1),REDUCE(标题,OFFSET(A1:D2,{0,3,6},),LAMBDA(x,y,VSTACK(x,IFNA(HLOOKUP(标题,y,2,),"")))))


今天的知识点比较密集,你学会了哪些呢?是否都已掌握!此题解法较多,大家尝试一下其他解法,还有很多更加简洁

Excel办公实战
分享Excel及WPS函数、技巧、VBA、PBI、JSA等办公技能。助你轻松实现办公自动化!易办公◎早下班!
 最新文章