跳转至

REDUCE 函数

函数概述

REDUCE 用于把一组值逐个“累积”成一个结果。它会从你指定的初始值开始,按顺序取数组中的每个元素,反复调用你提供的 LAMBDA 进行合并,最终返回一个值(也可以是一个数组)。

你可以把它理解为: “从 initial_value 出发,对 array 里的每个元素做一次‘累计运算’,最后得到总结果”。

典型应用:

  • 求和、求积、累计计数等聚合运算
  • 把多列/多表结果逐步合并
  • 生成自定义的累计数组(如逐步拼接、逐步叠加)

基础语法

=REDUCE(initial_value, array, lambda)

参数说明

参数 必填 含义 说明
initial_value 初始累积值 第一次计算时的“起点”,类型可为数字/文本/数组
array 要遍历的数组 可以是一列/一行/多行多列;遍历顺序按列展开(从左到右、从上到下)
lambda 累积规则 形如 LAMBDA(acc, value, ...),每步返回新的 acc

lambda 通常写成:LAMBDA(acc, cur, <返回新的acc>) 其中 acc 是累计结果,cur 是当前元素。


基础用法示范

下面示例均可直接套用,你只需要把数据区域替换成自己的范围即可。

1)对一列求和

数据源示例(任意一列数字):

数值
10
20
30

公式:

=REDUCE(0, A2:A4, LAMBDA(acc, cur, acc+cur))

结果:60


2)对一列求积

=REDUCE(1, A2:A4, LAMBDA(acc, cur, acc*cur))

说明:初始值用 1 更符合“乘法单位元”的语义。


3)统计满足条件的个数

数据源示例:

分数
58
76
90
61

需求:统计 >=60 的人数

=REDUCE(0, A2:A5, LAMBDA(acc, cur, acc + (cur>=60)))

说明:(cur>=60) 会返回 TRUE/FALSE,在运算中会被当作 1/0 累加。


4)把文本逐个拼接

数据源示例:

名称
苹果
香蕉

需求:用 连接成一句话

=REDUCE("", A2:A4, LAMBDA(acc, cur, IF(acc="", cur, acc&"、"&cur)))

结果:苹果、香蕉、梨


5)对二维区域做累计

数据源示例(2×3):

A B C
1 2 3
4 5 6

需求:把整个区域求和

=REDUCE(0, A2:C3, LAMBDA(acc, cur, acc+cur))

说明:REDUCE 会把二维区域按顺序展开遍历后累加。


6)生成“累计结果数组”

REDUCE 不仅能输出单个值,也可以让 acc 变成一个“会增长的数组”,从而得到一串累计结果。

数据源示例:

数值
5
8
2

需求:得到累计和序列:5, 13, 15

1
2
3
4
=DROP(
  REDUCE(0, A2:A4, LAMBDA(acc, cur, VSTACK(acc, TAKE(acc,-1)+cur))),
  1
)

思路说明:

  • acc 维护一列累计结果(用 VSTACK 逐步往下叠)
  • TAKE(acc,-1) 取最后一个累计值,再加上当前值
  • 最开始放了一个 0,所以用 DROP(...,1) 把首行去掉

总结

  • REDUCE 的核心是“初始值 + 遍历数组 + LAMBDA累计规则”。
  • lambda 每一步都要返回新的累计值 acc,最终 REDUCE 返回最后一次的 acc
  • 不仅能做聚合(求和/计数/拼接),还可以把 acc 设计成数组,实现“生成累计序列”等更灵活的效果。