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

Google Sheets跨指定多工作表实现COUNTIFS统计的问题求助

解决方案:Google Sheets 跨指定工作表 COUNTIFS 统计

一、优先公式方案(支持最多12个工作表)

原公式失效原因:INDIRECT("'"&A2:A1000&"'!B2:H2")会生成多区域数组,但COUNTIFS无法直接对数组化区域逐个统计,仅会处理第一个区域。

改用BYROW遍历工作表列表,逐个统计后求和,公式如下:

=SUM(BYROW(A2:A12, LAMBDA(sheet, IF(ISBLANK(sheet), 0, COUNTIFS(INDIRECT("'"&sheet&"'!B2:H2"), D1)))))
  • 逻辑:BYROW遍历A2:A12的每个工作表名,INDIRECT定位对应工作表的B2:H2区域,COUNTIFS统计匹配D1的数量,空单元格返回0避免错误,最后用SUM汇总所有结果。
  • 优势:无需脚本,数据变更时自动重算,适配12个以内工作表的场景。
  • 兼容处理:公式通过'"&sheet&"'的单引号,自动适配含空格、特殊字符的工作表名。

二、自定义脚本优化方案(批量自动重算)

若需保留脚本方案,可通过修改代码+配置触发器解决「数据变更需重新输入公式」的问题:

1. 更新脚本代码

打开Google Sheets的「扩展程序」→「Apps脚本」,替换原有代码为:

function countOccurrencesAcrossSheets(sheetListRange, targetRangeStr, matchValue) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetList = sheetListRange.flat().filter(name => name !== "");
  let total = 0;
  
  sheetList.forEach(sheetName => {
    const sheet = ss.getSheetByName(sheetName);
    if (!sheet) return;
    const targetRange = sheet.getRange(targetRangeStr);
    const values = targetRange.getValues().flat();
    total += values.filter(val => val === matchValue).length;
  });
  
  return total;
}

2. 使用优化后的函数

在目标单元格输入:

=countOccurrencesAcrossSheets(A2:A12, "B2:H2", D1)

参数说明:

  • A2:A12:存放工作表名的范围
  • "B2:H2":要统计的目标区域字符串
  • D1:需要匹配的目标值

3. 配置自动重算触发器

解决数据变更不自动更新的问题:

  1. 在脚本编辑器左侧点击「触发器」→「添加触发器」
  2. 配置选项:
    • 选择函数:countOccurrencesAcrossSheets
    • 事件源:「从电子表格」
    • 事件类型:「编辑时」
      设置完成后,任何工作表的目标区域或匹配值变更时,函数会自动重算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:15:21