跳转至

BYROW 函数

函数概述

BYROW 用于按行遍历一个数组/区域,把每一行依次交给你提供的 LAMBDA 计算,并将每行的计算结果汇总成一个新数组返回。它常用于“对每一行做同一套计算”的场景,比如:逐行求和、逐行统计达标数、逐行判断是否满足条件、逐行生成标签等。

你可以把它理解为:把二维数据拆成很多行 → 每行套一次规则 → 拼回结果


基础语法

=BYROW(array, lambda)

参数说明

参数 类型 必填 说明
array 区域/数组 要按行处理的数据源,可以是区域引用或公式生成的数组
lambda LAMBDA 对“每一行”执行的函数,形如 LAMBDA(row, 计算表达式)

补充说明:

  • lambda 里通常写成 LAMBDA(r, ... ),其中 r 代表当前行(一个横向数组)。
  • BYROW 会返回一个“按行输出”的结果:通常是单列(每行一个结果),也可能是多列(如果你的 LAMBDA 返回横向数组)。

基础用法示范

下面示例假设数据区域为一个 5 行 × 4 列的表(例如每行是一个员工/订单,每列是不同指标)。

1) 逐行求和

需求:每行把 4 个数相加,得到每行总计。

=BYROW(A2:D6, LAMBDA(r, SUM(r)))

返回结果:一列 5 个值,每个值对应一行的合计。


2) 逐行求平均

需求:每行计算平均分/平均值。

=BYROW(A2:D6, LAMBDA(r, AVERAGE(r)))

3) 逐行统计非空数量

需求:每行统计填写了多少项(非空单元格数)。

=BYROW(A2:D6, LAMBDA(r, COUNTA(r)))

如果是统计数字个数,可用:

=BYROW(A2:D6, LAMBDA(r, COUNT(r)))

4) 逐行判断是否达标

需求:每行总分 ≥ 240 显示“达标”,否则“未达标”。

=BYROW(A2:D6, LAMBDA(r, IF(SUM(r)>=240, "达标", "未达标")))

5) 逐行统计满足条件的个数

需求:每行统计“≥60”的科目数。

=BYROW(A2:D6, LAMBDA(r, COUNTIF(r, ">=60")))

6) 逐行生成多列结果

需求:每行同时返回“总分、平均分”两列结果(横向输出)。

=BYROW(A2:D6, LAMBDA(r, HSTACK(SUM(r), AVERAGE(r))))

返回结果会溢出为 5 行 × 2 列。


7) 与筛选/清洗组合使用

需求:先过滤掉空行,再对剩余行求和。

1
2
3
4
5
=LET(
  data, A2:D100,
  kept, FILTER(data, BYROW(data, LAMBDA(r, COUNTA(r)>0))),
  BYROW(kept, LAMBDA(r, SUM(r)))
)

思路:BYROW 先生成每行是否为空的判断数组,再配合 FILTER 过滤,最后对过滤后的数据逐行计算。


总结

  • BYROW(array, LAMBDA(row, ...)) 专门解决“按行批量套同一规则”的问题。
  • row 参数代表当前行的横向数组,可直接交给 SUM/AVERAGE/COUNTIF 等函数处理。
  • LAMBDA 返回一个值时,最终结果通常是一列;返回横向数组时,可得到多列输出。
  • 常见用途:逐行汇总、逐行统计、逐行打标、逐行生成派生字段;与 LET/FILTER/HSTACK 搭配能写出更清晰的动态数组方案。