乐于分享
好东西不私藏

150、Excel 365新增函数介绍之二---BYROW和BYCOL函数

150、Excel 365新增函数介绍之二---BYROW和BYCOL函数
      BYROW和BYCOL函数可以对数组的每一行或每一列分别进行运算,最后返回单行或单列的数组。两个函数的参数和用法基本一样。其结构均为(数组,[函数])。具体为:

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

     第一个参数array是要进行逐行或逐列遍历的数据,可以是引用或数组。第二个参数为lambda函数定义的运算体,该函数默认第一个参数是一个变量,指向byrow/bycol函数第一个参数的每行/每列数据,第二个参数表示计算方式。
byrow/bycol函数对数组的每一行/列执行lambda函数运算体确定的运算,最终返回与第一参数数组行/列数相同的单列/行数组。
      某次考试中部分同学的成绩如下图表格所示,现在需要计算每个同学以及每门课程的总成绩、最高成绩以及平均成绩。在之前我们可以使用对应的函数进行计算,比如sum然后选择对应的成绩作为参数,然后复制公式,这样显然也是比较繁琐的。
      利用本节所介绍的新函数可以很快捷的得到所求的结果,如下图所示:
黄色区域为求每个同学的相关指标,H2到J2单元格输入的公式分别为:=BYROW(B2:G7,SUM);=BYROW(B2:G7,MAX);=BYROW(B2:G7,AVERAGE)
B8到B10单元格输入的公式分别为:

=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个人姓名,每列提取的数据使用换行符进行合并。结果如下图所示:

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

相关学习资料