跳转至

BYCOL 函数

函数概述

BYCOL 是 Excel 动态数组函数之一,用于按列遍历一个数组/区域,并将每一列作为一个整体交给 LAMBDA 计算,最后把每列的计算结果汇总成一个新的数组返回。 它特别适合做“逐列统计/逐列转换/逐列提取”的场景,例如:每列求和、每列最大值、每列生成标签、每列标准化等。

常见搭配:LAMBDASUMAVERAGEMAXFILTERTAKEDROPLET


基础语法

=BYCOL(array, lambda)

参数说明

参数 必填 含义 说明
array 要按列处理的数组/区域 可以是区域引用或公式返回的动态数组
lambda 对“每一列”执行的计算逻辑 形如 LAMBDA(col, 计算表达式),其中 col 代表当前列(一个列向量数组)

基础用法示范

说明:下面示例用到的数据源请按你的表格自行摆放;我用“数据源表”描述字段与示例值,你可以替换为实际区域引用。

示例1:每列求和

需求:对多列数据分别求和,返回每列总和。

数据源(示例)

列1 列2 列3
10 12 8
5 3 9
7 6 4

公式

=BYCOL(数据区域, LAMBDA(col, SUM(col)))

结果说明:返回一个横向数组,例如 {22, 21, 21}(对应每列的总和)。


示例2:每列求平均并保留两位小数

需求:逐列计算平均值并四舍五入到 2 位。

公式

=BYCOL(数据区域, LAMBDA(col, ROUND(AVERAGE(col), 2)))

示例3:每列统计“非空单元格”数量

需求:每列有空值,统计每列非空个数。

公式

=BYCOL(数据区域, LAMBDA(col, COUNTA(col)))

示例4:每列求最大值,并生成带前缀的标签

需求:输出形如 Max=xxx 的结果(每列一个)。

公式

=BYCOL(数据区域, LAMBDA(col, "Max=" & MAX(col)))

结果说明:返回横向文本数组,如 {Max=10, Max=12, Max=9}


示例5:每列做标准化(减去本列均值)

需求:把每列数据转换为“减去本列平均值”的结果,输出与原数据同尺寸的矩阵。

公式

1
2
3
4
=BYCOL(
  数据区域,
  LAMBDA(col, col - AVERAGE(col))
)

结果说明BYCOL 的每次 LAMBDA 产出的是一整列数组,因此最终会拼成与原区域行数相同、列数相同的新数组。


示例6:与 LET 搭配,返回两行结果

需求:做一个小报表:第一行是各列总和,第二行是各列平均。

公式

1
2
3
4
5
6
=LET(
  a, 数据区域,
  sums, BYCOL(a, LAMBDA(c, SUM(c))),
  avgs, BYCOL(a, LAMBDA(c, AVERAGE(c))),
  VSTACK(sums, avgs)
)

结果说明VSTACK 将两行结果纵向堆叠,形成 2 行 N 列的汇总表。


总结

  • BYCOL 的核心是:按列迭代 + 把每列交给 LAMBDA
  • array 决定要处理的列范围;LAMBDA(col, …) 决定“每一列要算什么”。
  • 输出既可以是每列一个值(如求和、最大值),也可以是每列一个数组(如标准化后返回整列),从而得到与原区域同尺寸或结构化的新动态数组。
  • 当你需要“逐列统计、逐列转换、逐列生成结果”时,BYCOL 通常比手写多组公式更简洁、更可维护。