谷歌表格如何在工作表名不固定时按单元格条件跨表求和
方案1:原生公式实现(无需脚本,优先推荐)
适用新版Google Sheets,无需提前列出工作表名称,新增工作表后自动更新统计结果。
假设你的汇总表名称为「汇总」,汇总表A列是提前确定的统计项(如A2为Rent、A3为Save),各发薪周期工作表的统计项存放在B列、对应数值存放在A列,在汇总表B2单元格输入以下公式后下拉即可:
=REDUCE(0, SEQUENCE(SHEETS()), LAMBDA(acc, sheet_idx, LET( sheet_name, SHEETNAME(sheet_idx), // 跳过汇总表自身避免循环计算 IF(sheet_name = "汇总", acc, acc + IFERROR(SUMIF(INDIRECT("'"&sheet_name&"'!B:B"), A2, INDIRECT("'"&sheet_name&"'!A:A")), 0) ) ) ))
公式逻辑说明:
SEQUENCE(SHEETS())自动生成当前所有工作表的序号SHEETNAME(sheet_idx)根据序号读取工作表名称,无需手动录入IFERROR兼容没有对应统计项的工作表,无匹配项时自动加0不影响最终结果
如果你的统计项、数值所在列有调整,修改公式中B:B(统计项列)、A:A(数值列)即可。
方案2:自定义脚本实现(兼容旧版表格)
如果你的Google Sheets版本不支持上述新函数,可以用Apps Script实现自定义函数:
- 点击顶部菜单栏「扩展程序」->「Apps 脚本」打开脚本编辑器
- 清空默认代码,粘贴以下内容:
function SUM_ALL_SHEETS(searchKey) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheets = ss.getSheets(); let total = 0; // 此处i从1开始默认跳过第一个工作表(汇总表),如果汇总表位置有变化自行调整 for (let i = 1; i < sheets.length; i++) { const sheet = sheets[i]; const itemCol = sheet.getRange("B:B").getValues(); for (let row = 0; row < itemCol.length; row++) { if (itemCol[row][0] === searchKey) { // 统计项对应数值在A列,列号1对应A列,有调整自行修改 total += sheet.getRange(row + 1, 1).getValue(); } } } return total; }
- 点击保存按钮,按提示完成权限授权后回到表格
- 在汇总表B2单元格输入
=SUM_ALL_SHEETS(A2),下拉填充到其他统计项即可。新增工作表后刷新页面就会自动更新统计结果。
内容的提问来源于stack exchange,提问作者Ginger McMurray
相关产品推荐
相关产品推荐

