如何在Google表格中跨不同工作表自动汇总相同项目数值总和
Google表格跨月份工作表自动汇总方案
一、函数式自动汇总(无需脚本)
如果各月份工作表的数据结构完全一致(比如A列是项目名称,B列是待汇总数值),可以用以下两种函数实现自动联动汇总:
1. QUERY函数批量合并汇总
适合固定月份数量,或手动添加新月份的场景。在总计表的B2单元格输入公式:
=QUERY({一月!A:B;二月!A:B;三月!A:B}, "SELECT Col1, SUM(Col2) WHERE Col1 IS NOT NULL GROUP BY Col1 LABEL SUM(Col2)'总计'", 1)
- 原理:用
{表1!区域;表2!区域}将多个工作表的目标区域合并为虚拟数组,再通过QUERY函数分组求和。 - 新增月份时,只需在数组中追加对应的工作表引用(比如
;四月!A:B)。
2. SUMIF+INDIRECT动态引用
适合月份工作表命名规范(如“1月”“2月”…“12月”),无需手动更新公式的场景。在总计表的B2单元格输入公式:
=SUMPRODUCT(SUMIF(INDIRECT("'"&TEXT(ROW(A1:A12),"0月")&"'!A:A"), A2, INDIRECT("'"&TEXT(ROW(A1:A12),"0月")&"'!B:B")))
- 原理:通过
TEXT(ROW(A1:A12),"0月")生成1-12月的工作表名,INDIRECT动态引用对应工作表的区域,再用SUMIF匹配项目求和,最后用SUMPRODUCT汇总所有月份的结果。 - 只要新月份工作表命名符合“X月”格式,公式会自动识别并汇总。
二、脚本实现每月自动更新
如果需要每月定时自动触发汇总(比如新月份工作表创建后自动更新总计),可以用Google Apps Script实现:
1. 汇总脚本代码
打开表格的「扩展程序」→「Apps脚本」,粘贴以下代码:
function updateTotalSheet() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const totalSheet = ss.getSheetByName("总计"); // 筛选命名为“X月”的工作表(可根据实际命名规则调整正则) const monthSheets = ss.getSheets().filter(sheet => /^\d+月$/.test(sheet.getName())); // 清空总计表旧数据(假设数据从第2行开始,表头在第1行) if (totalSheet.getLastRow() > 1) { totalSheet.getRange(2, 1, totalSheet.getLastRow()-1, totalSheet.getLastColumn()).clearContent(); } // 收集所有月份的有效数据(跳过表头行) let allData = []; monthSheets.forEach(sheet => { const data = sheet.getDataRange().getValues(); if (data.length > 1) { allData = allData.concat(data.slice(1)); } }); // 按项目名称汇总数值 const summaryMap = {}; allData.forEach(row => { const itemName = row[0]; const itemValue = row[1] || 0; if (itemName) { summaryMap[itemName] = (summaryMap[itemName] || 0) + itemValue; } }); // 将汇总结果写入总计表 const outputRows = Object.entries(summaryMap).map(([name, total]) => [name, total]); if (outputRows.length > 0) { totalSheet.getRange(2, 1, outputRows.length, 2).setValues(outputRows); } } // 创建每月定时触发器(首次运行一次即可) function setupMonthlyTrigger() { // 设置每月1号上午9点自动运行汇总 ScriptApp.newTrigger("updateTotalSheet") .timeBased() .onMonthDay(1) .atHour(9) .create(); }
2. 配置说明
- 首次运行时,先执行
setupMonthlyTrigger函数,授权后会创建每月定时触发任务。 - 如果月份工作表命名规则不同(比如“2024-01”),修改
/^\d+月$/为对应的正则表达式即可(比如/^\d{4}-\d{2}$/)。 - 若需要在新增工作表时自动触发,可添加
onChange触发器监听工作表创建事件。
注意事项
- 确保所有月份工作表的数据列位置一致,否则函数或脚本会出现匹配错误。
- 项目名称需统一格式(避免大小写、空格差异),否则会被识别为不同项目。
- 函数方法会随源数据实时更新,脚本方法则按设定时间触发更新。
内容的提问来源于stack exchange,提问作者antho2B
相关产品推荐
相关产品推荐

