SCAN 函数¶
函数概述¶
SCAN 是 Excel 动态数组函数之一,用来对一组数据做“逐步累积计算”,并把每一步的中间结果全部返回为数组。
你可以把它理解为:从左到右(或从上到下)“边走边算”,每走一步就输出一次当前累计值。
典型用途包括:累计和、累计乘积、余额滚动、逐步拼接文本、逐日累计达成、运行中的最大/最小值等。
基础语法¶
SCAN会对array中的每个元素依次执行lambda,并输出每一步的累计结果数组。- 与
REDUCE的区别:REDUCE只返回最终累计值;SCAN返回所有步骤结果。
参数说明¶
| 参数 | 是否必填 | 含义 | 说明 |
|---|---|---|---|
| initial_value | 否 | 初始累计值 | 省略时,Excel 会以 array 的第一个元素作为起点(实际行为会影响结果结构与计算起点,建议需要“从 0/空/指定值开始”时显式填写) |
| array | 是 | 需要遍历的数组/区域 | 可以是行/列区域,也可以是动态数组表达式 |
| lambda(accumulator, value) | 是 | 逐步计算规则 | accumulator 表示上一步累计结果,value 表示当前元素 |
lambda必须是LAMBDA(累计值, 当前值, 计算表达式)这种结构。
基础用法示范¶
示例1:累计求和¶
数据:A2:A7 为每日新增
| 日期 | 新增 |
|---|---|
| 1/1 | 5 |
| 1/2 | 3 |
| 1/3 | 6 |
| 1/4 | 2 |
| 1/5 | 4 |
| 1/6 | 1 |
公式:
结果含义:返回每一天的累计总数(5、8、14、16、20、21)。
示例2:账户余额滚动¶
数据:A2:A7 为每日收支(正为收入,负为支出),期初余额在 E2
- E2(期初余额):1000
- A2:A7:-50, 200, -120, -80, 60, -30
公式:
结果含义:输出每天的期末余额数组(950、1150、1030、950、1010、980)。
示例3:逐步拼接文本¶
数据:A2:A6 为词组:我、爱、学、Excel、函数
公式:
结果含义:逐步输出: 我 我 爱 我 爱 学 我 爱 学 Excel 我 爱 学 Excel 函数
示例4:运行中的最大值¶
数据:A2:A8 为销量:12, 9, 15, 11, 18, 16, 10
公式:
结果含义:输出每一步截至当前的最高销量:12、12、15、15、18、18、18。
示例5:带条件的累计¶
场景:只累计“部门=销售”的业绩
- A2:A8:部门
- B2:B8:业绩
公式:
这类“跨列条件扫描”更常见的写法是先用
FILTER得到要累计的数组,再SCAN,会更清爽。
更推荐的写法(先筛选再累计):
总结¶
SCAN的核心价值是:把逐步累积过程完整输出,非常适合做运行总计、滚动余额、递进文本、动态指标等。-
使用时抓住三点:
- 是否需要明确起点:需要就写
initial_value array决定遍历顺序(行/列)LAMBDA(acc, v, …)决定每一步怎么“更新累计值”
- 是否需要明确起点:需要就写
-
当你只关心最终结果时,用
REDUCE;当你需要每一步过程结果时,用SCAN。