BYROW (array, lambda(row)); BYCOL (array, lambda(column))


=BYCOL(B2:G7,SUM);=BYCOL(B2:G7,MAX)
=BYCOL(B2:G7,AVERAGE)
公式直接按行/列就返回了相应行/列的各项指标结果,这里直接将成绩区域作为函数的第一个参数,第二个参数为对应的指标函数。是不是更加方便快捷了?尤其是当数据量较大的时候。
如果要求每个学生的最大成绩之和,或者每门课的最大成绩之和呢?(也就是对上边获取的最高分进行求和)又该如何处理呢?
常规思路是:获取每个学生/每门课的最大成绩,然后求和。如果分步骤去求解,显然是比较繁琐的。
使用本节介绍的两个函数可以轻松进行求解,如下图所示:

K2单元格公式为“=SUM(BYROW(B2:G7,LAMBDA(x,MAX(x))))”;
B11单元格公式为“=SUM(BYCOL(B2:G7,LAMBDA(x,MAX(x))))”
byrow/bycol函数将成绩区域B2:G7作为逐行/逐列执行运算的区域,lambda函数的第一个参数将每行/列数据设置为变量x,然后使用max函数计算每一行/列数据的最大值,返回一个内存数组,最后使用sum函数求和。
为了查漏补缺,需要获取每个考生最差的三门科目名称。如下图所示:

在O2单元格输入公式“=BYROW(B2:G7,LAMBDA(x,TEXTJOIN(",",,TAKE(SORTBY(B1:G1,x,1),,3))))”。公式中的变量x代表每一行的成绩,sortby函数依据x对学科名称进行升序排序,然后使用take函数提取前3列的信息(注意take函数的第二个参数为行,第三个为列,这里要提取的是列中的数据,所以省略行参数,设置列参数,注意这个细节),提取出的科目名称使用textjoin函数用分隔符“,”进行合并,最终返回6行1列的结果。
最后,给大家留一个小小的思考题:参考上边获取每个人最差3门科目名称,使用bycol函数获取每门课考得最差的3个人姓名,每列提取的数据使用换行符进行合并。结果如下图所示:

有兴趣的朋友们赶快动起来吧!当然逐行/列运算函数的应用场景还有很多,欢迎各位朋友在评论区交流。
夜雨聆风