分享

NO.185# BYROW函数和BYCOL函数小课堂

 bookstore520 2024-03-30 发布于广东



地 球 不 爆 炸    我 们 不 打 烊

图片            图片

>>>上课啦:


MMULT函数可以遍历一个多行多列的数据矩阵,聚合为单行或者单列的数据结构。因为该函数运算会涉及到高等数学《线性代数》中的矩阵知识,所以该函数很难被“驾驭”!但是,这一切随着BYROW函数和BYCOL函数的到来而改变~~




图片


言之有李:


☆☆ 什么是“遍历”???

☆☆ 遍历是指按照一定的规则和顺序访问一个数据结构中的所有元素。


☆☆ 什么是“聚合”???

☆☆ 聚合是指对有关数据进行内容挑选、分析和归类,最后得到想要的结果。


☆☆ BYROW函数的定义???

☆☆ BYROW函数:逐行遍历实现聚合,即按行扫描整个数组,并对每行执行LAMBDA函数的自定义公式计算,返回每行的计算结果。该结果跟原数组行数相同,但是只有一列,例如:原数组是7行6列,则返回数组是7行1列。如下图所示


BYROW函数结果


图片


☆☆ BYCOL函数的定义???

☆☆ BYCOL函数:逐列遍历实现聚合,即按列扫描整个数组,并对每列执行LAMBDA函数的自定义公式计算,返回每列的计算结果。该结果跟原数组列数相同,但是只有一行,例如原数组是7行6列,则返回数组是1行6列。如下图所示


BYCOL函数结果


图片


☆☆ BYROW函数的语法???

☆☆ =BYROW(Array,LAMBDA(Row))

第1参数Array表示行分隔的数组。如果该参数是引用单元格区域,则会保留引用单元格区域属性

第2参数LAMBDA(Row)表示将数组中的行作为单个参数并计算的LAMBDA自定义函数


☆☆ BYCOL函数的语法???

☆☆ =BYCOL(Array,LAMBDA(Column))

第1参数Array表示列分隔的数组。如果该参数是引用单元格区域,则会保留引用单元格区域属性

第2参数LAMBDA(Column)表示将数组中的列作为单个参数并计算的LAMBDA自定义函数


☆☆ BYROW函数和BYCOL函数的出错???

☆☆ 当提供无效的LAMBDA函数时,则返回#VALUE!错误值

☆☆ 当不提供有效的LAMBDA函数,则返回#CALC!错误值


☆☆ BYROW函数和BYCOL函数的注意???

☆☆ BYROW函数对每一行处理后的结果和BYCOL函数对每一列处理后的结果一定是一个单值


【例题1】获取每位学生的最高分和每科课程的最高分



图片


小试牛刀:


获取每位学生的最高分,在i2单元格编辑函数公式=BYROW(B2:G11,LAMBDA(x,MAX(x)))ENTER回车

ЖЖ将第1行数据传递到 x 中,用MAX函数对它求最大值,返回84;将第2行数据传递到 x 中,用MAX函数对它求最大值,返回86;……,一直重复循环这个过程


※※获取每科课程的最高分,在b13单元格编辑函数公式=BYCOL(B2:G11,LAMBDA(x,MAX(x))),ENTER回车

ЖЖ将第1列数据传递到 x 中,用MAX函数对它求最大值,返回83;将第2列数据传递到 x 中,用MAX函数对它求最大值,返回86;……,一直重复循环这个过程


娓娓道来:


在新函数出现之前,通常借助OFFSET函数的多维引用和SUBTOTAL函数的降维功能实现


获取每位学生的最高分,在i2单元格编辑函数公式=SUBTOTAL(4,OFFSET(B1:G1,ROW($1:$10),))ENTER回车

※※获取每科课程的最高分,在b13单元格编辑函数公式=SUBTOTAL(4,OFFSET(A2:A11,,COLUMN($A:$F))),ENTER回车


【例题2】获取每位学生超过80分的明细数据




图片


小试牛刀:


如果将明细数据结果分开放置,则在i2单元格编辑函数公式

=BYROW(B2:G11,LAMBDA(x,TEXTJOIN(CHAR(10),,IF(x>80,B1:G1&":"&x,""))))

如果将明细数据结果合并放置,则在k2单元格编辑函数公式

=TEXTJOIN(CHAR(10),,BYROW(B2:G11,LAMBDA(x,LET(y,TEXTJOIN(",",,IF(x>80,B1:G1&"-"&x,"")),IF(LEN(y),INDEX(A:A,ROW(x))&":"&y,"")))))


【例题3】根据右侧的数据查询左侧银行网点的地点




图片


小试牛刀:


在B2单元格编辑函数公式

=TEXTJOIN(,,BYROW($D$2:$D$15,LAMBDA(x,IF(ISERR(FIND(x,A2)),"",x))))

娓娓道来:


在新函数出现之前,可以借助MATCH函数的通配符知识点,在B2单元格编辑函数公式

=INDIRECT("D"&MAX(ISNUMBER(MATCH("*"&$D$2:$D$15&"*",A2,))*ROW($D$2:$D$15)))

在新函数出现之前,也可以借助LOOKUP函数的二分法知识点,在B2单元格编辑函数公式

=LOOKUP(1,0/FIND($E$2:$E$15,A2),$E$2:$E$15)

下课啦>>>:


例题2和例题3中关于BYROW函数公式解析参照例题1中BYROW函数公式解析,三者都是“殊途同归”,不再赘述~~


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多