Google Sheets多列间隔求和 批量汇总107个活动数据方案咨询
多活动同结构数据批量求和方案
方案1:纯函数方案(无代码,自动适配新增活动)
根据你描述的同格式活动块并排存放的结构,默认每个活动固定占3列、同指标列间隔3列的规则,直接用内置函数即可实现全量汇总:
单列指标汇总公式
对应汇总表的第一个指标列,在第二行单元格输入以下公式后下拉即可:=SUM(FILTER(data!2:2, MOD(COLUMN(data!2:2), 3) = 2))
参数调整说明:
- 公式中的
3为单个活动占用的总列数,可根据实际结构调整 =2为当前指标在单个活动块中的列偏移余数,第二个指标对应=0、第三个指标对应=1,根据你要统计的指标修改即可
整表自动生成公式
无需逐列写公式,直接在汇总表A2单元格输入以下公式,可一次性生成所有日期、所有指标的全量汇总结果:=MAKEARRAY(COUNTA(data!A2:A), 3, LAMBDA(r, c, IF(c=1, INDEX(data!A:A, r+1), SUM(FILTER(OFFSET(data!A1, r, 1, 1, 321), MOD(SEQUENCE(1, 321, 1, 1), 3)=c-1)))))
说明:公式中的321为107个活动*3列的总宽度,后续活动数量增加只要修改这个数值即可,所有数据自动计算。
方案2:Apps Script脚本方案(适合大数据量场景)
如果数据量超过函数计算上限,或需要定时自动更新,可使用以下脚本:
function autoConsolidateCampaign() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const dataSheet = ss.getSheetByName('data'); const targetSheet = ss.getSheetByName('consolidated'); const rawData = dataSheet.getDataRange().getValues(); const perCampaignCols = 3; // 单个活动占用列数 const metricNum = 2; // 除去日期外的指标数量 const output = []; // 逐行统计汇总 for (let rowIdx = 1; rowIdx < rawData.length; rowIdx++) { const currentRow = rawData[rowIdx]; const date = currentRow[0]; const sumMetrics = new Array(metricNum + 1).fill(0); sumMetrics[0] = date; // 遍历所有活动的指标列 for (let colIdx = 1; colIdx < currentRow.length; colIdx += perCampaignCols) { for (let m = 0; m <= metricNum; m++) { sumMetrics[m + 1] += Number(currentRow[colIdx + m] || 0); } } output.push(sumMetrics); } // 写入结果到汇总表 targetSheet.getRange(2, 1, output.length, output[0].length).setValues(output); }
使用说明:
- 打开Google Sheet后点击「扩展程序」-「Apps Script」,将代码粘贴到编辑器中保存
- 可设置定时触发器,每天自动更新汇总数据
- 新增活动无需修改代码,只要保持每个活动的列宽与原有活动一致即可
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

