
本文介绍如何在 google sheets 中通过内置公式(无需脚本)动态遍历指定名称的工作表,提取并汇总特定区域的数据,适用于年度财务分类统计等场景。
本文介绍如何在 google sheets 中通过内置公式(无需脚本)动态遍历指定名称的工作表,提取并汇总特定区域的数据,适用于年度财务分类统计等场景。
在实际财务建模中,常需将分散在多个按月命名的工作表(如 Jan2023 monthly totals、Feb2023 monthly totals 等)中的同类数据统一汇总到一张总表(如 Totals for categories 2023)。手动逐个引用 SUMIFS 不仅冗长易错,还难以维护。幸运的是,Google Sheets 提供了强大的动态数组函数组合(LET + LAMBDA + REDUCE + INDIRECT),完全可以在纯公式层面实现“遍历工作表 → 提取数据 → 按条件聚合”的全流程,无需编写 Apps Script。
✅ 核心思路:用 INDIRECT 动态引用 + REDUCE 迭代堆叠 + QUERY 聚合
以下公式可直接粘贴至新工作表的 A1 单元格,自动完成跨表汇总:
通过 Maton API Gateway 与 Google Sheets 交互,使用 curl 读取、写入、追加和清除电子表格数据。在用户提及相关需求时使用此技能。
=LET(
stackValues_, LAMBDA(sn, ra,
REDUCE(TOCOL(, 2), sn,
LAMBDA(rs, s,
LET(
r, INDIRECT(s & "!" & ra),
l, MAX(INDEX(ROW(r) * IFERROR(r <> ""))),
d, FILTER(r, ROW(r) <= l),
IF(COUNTA(IFERROR(d)), VSTACK(rs, d), rs)
)
)
)
),
sheetNames, TOCOL('Totals for categories 2023'!N4:N, 1),
data, stackValues_(sheetNames, "P8:S"),
QUERY(
data,
"SELECT Col1, Col2, SUM(Col4)
WHERE Col4 IS NOT NULL
GROUP BY Col1, Col2
LABEL Col1 'Category', Col2 'Sub Category'",
0
)
)? 公式关键组件说明:
- sheetNames:从 'Totals for categories 2023'!N4:N 读取有效工作表名列表(自动忽略空行);
- stackValues_:自定义 LAMBDA 函数,接收工作表名数组 sn 和区域字符串 ra(如 "P8:S"),逐个用 INDIRECT 构造引用,并用 FILTER+VSTACK 安全堆叠非空数据;
- QUERY:对堆叠后的二维数组执行 SQL 风格聚合——按第1列(Category)、第2列(Sub Category)分组,求第4列(金额)之和。
⚠️ 注意事项:
- 所有被引用的工作表中,P8:S 区域必须结构一致(即 P 列=Category,Q 列=Sub Category,S 列=数值);
- 若原始数据含标题行,请将 ra 改为 "P9:S" 并在 QUERY 中调整列索引,或先用 QUERY(..., "WHERE Col1 != 'Category'", 1) 排除首行;
- INDIRECT 属易失性函数,大量工作表时可能轻微影响计算性能,但百级以内完全可接受;
- 如需替换为其他聚合逻辑(如 COUNTIFS 或 AVERAGEIFS 效果),只需修改 QUERY 的 SELECT 子句即可,无需重写底层堆叠逻辑。
此方案彻底解耦了「获取表名」与「汇总逻辑」:你仍可用原有 getAllSheetNames() Apps Script 函数生成表名列表(填入 N4:N),也可直接手动维护该列——公式会自动响应新增/删减的工作表,真正实现一键刷新、长期复用。

















