REDUCE函数这个用法真的妙不可言!
职场
教育
2024-10-30 11:10
江苏
今天的需求非常简单,也是很多老师常用的一个问题,借着这个问题,我们一起交流一下REDUCE第二参数的数组化用法,知识点密集,请做好笔记!A到D列每三行一组,对应的一个学生的各科成绩,中间间隔一行,由于科目不同,老师登记采用的每人一行的登记方法!想要做成二维结果,主要还是标题的问题,我们需要想办法获取全部科目及第一列的姓名。这个只要筛选第一列是姓名的行,然后提取唯一值即可,比如下面这样!
=UNIQUE(TOROW(FILTER(A1:D8,A1:A8="姓名"),3),1)
至此,你已成功了搞定了第一大步-提取全部科目作为标题!
下面的问题,就是如何在各组登记的数据中查找对应科目的数据,不存在,容错处理成空值即可!
这个大家应该都是OK的,直接使用刚处理好的标题,作为HLOOKUP函数第一参数进行查询,IFNA容错处理,查询不到就会返回#NA错误,IFNA第二参数,填写出错后想要显示的内容,这里是空字符,显示空白!
下面逻辑比较简单,也就是逐个迭代处理,然后上下追加到一起即可!但是对新手来讲不熟悉REDUCE函数有点难度,同时我们用一下参数数组化
下面我们看一下核心的部分构建,显示就是循环部分如果获取,方法很多,本次我们想用OFFSET函数把每个部分作为一个整体参与REUDCE循环!看结果返回错误,其实他们对应的是3个人的数据,是一个二维的平面区域,无法直接显示,但是事实确实不影响后续调用! REDUCE("",OFFSET(A1:D2,{0,3,6},), LAMBDA(x,y,VSTACK(x,IFNA(HLOOKUP(F1#,y,2,),"")))
避免过多的干扰,我们暂时不把标题处理部分添加进来,上面的公式,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,),"")))))
今天的知识点比较密集,你学会了哪些呢?是否都已掌握!此题解法较多,大家尝试一下其他解法,还有很多更加简洁