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

Google Sheets多工作表按姓名求和功能/代码需求

多工作表按姓名汇总工时(Google Sheets解决方案)

内置函数方案(无需脚本)

针对跨表按姓名汇总小时数、适配工作表定期更新的需求,可替代INDIRECT硬编码的局限,使用以下数组公式:

假设汇总表姓名列在A列,求和结果放在B列,在B2单元格输入公式后下拉:

=SUM(ARRAYFORMULA(IFERROR(VLOOKUP(A2, INDIRECT("'"&FILTER(GET_WORKBOOK_TABS(), GET_WORKBOOK_TABS()<>"汇总表")&"'!A:B"), 2, FALSE))))

公式说明

  • GET_WORKBOOK_TABS():自动获取当前文档所有工作表名称
  • FILTER(..., GET_WORKBOOK_TABS()<>"汇总表"):排除汇总表自身,避免循环引用
  • INDIRECT("'"&...&"'!A:B"):动态引用每个工作表的A(姓名)、B(小时数)列,自动适配新增工作表
  • VLOOKUP:在每个工作表中匹配当前姓名对应的小时数
  • IFERROR:处理姓名未出现在某工作表的情况,返回0不影响求和
  • SUM:汇总所有工作表的匹配结果

Apps Script自定义函数方案(灵活适配复杂场景)

如果工作表字段位置不固定,或需要更灵活的逻辑,可使用自定义脚本:

  1. 打开目标Google Sheet,点击「扩展程序」→「Apps 脚本」
  2. 替换默认代码为以下内容:
function SUM_BY_NAME(name) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  let totalHours = 0;
  
  sheets.forEach(sheet => {
    // 替换为你的汇总表名称,跳过自身
    if (sheet.getName() === "汇总表") return;
    
    const data = sheet.getDataRange().getValues();
    // 调整列索引:姓名列=0(A列),小时数列=1(B列),按需修改
    const nameColIndex = 0;
    const hourColIndex = 1;
    
    data.forEach(row => {
      if (row[nameColIndex] === name) {
        totalHours += row[hourColIndex] || 0;
      }
    });
  });
  
  return totalHours;
}
  1. 保存脚本并返回表格,在汇总表B2单元格输入=SUM_BY_NAME(A2),下拉即可自动计算

优势

  • 自动识别新增/删除的工作表,无需手动更新公式
  • 可灵活调整姓名、小时数的列位置,适配不同工作表的字段布局

注意事项

  • 内置函数方案需启用Google Sheets扩展函数,首次使用GET_WORKBOOK_TABS()需完成授权
  • 若工作表名称含特殊字符(如空格、符号),内置公式的单引号已自动处理兼容问题

内容的提问来源于stack exchange,提问作者hubehe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:46:00