You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:27:43