如何在Google Sheets中批量自动计算对应行红色单元格之和
批量求和每行红色单元格到对应绿色单元格的方法
方法一:自定义函数(自动更新)
这种方法适合后续红色单元格内容或颜色变化时,自动同步求和结果:
- 打开Google Sheets,点菜单栏「扩展程序」→「Apps Script」进入脚本编辑器
- 删除默认代码,粘贴下面的脚本:
function SUMBYCOLOR(range, colorCell) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var rangeValues = range.getValues(); var color = colorCell.getBackground(); var sum = 0; for (var i = 0; i < rangeValues.length; i++) { for (var j = 0; j < rangeValues[0].length; j++) { if (range.getCell(i+1, j+1).getBackground() == color) { sum += rangeValues[i][j] || 0; } } } return sum; }
- 保存脚本(给项目随便起个名字,比如「颜色求和工具」),关闭编辑器回到表格
- 在第一行绿色单元格输入公式:
=SUMBYCOLOR(B2:D2, B2)(这里B2:D2是该行红色单元格的范围,B2是任意一个红色单元格作为颜色参考,你要根据自己表格的列调整) - 选中这个绿色单元格,鼠标按住右下角的填充柄往下拖,就能批量把公式应用到所有行
方法二:一次性脚本填充(适合固定数据)
如果只是需要一次性计算填充,后续不需要自动更新,用这个更高效:
- 同样打开Apps Script编辑器,粘贴下面的脚本:
function fillSumByRedColor() { var sheet = SpreadsheetApp.getActiveSheet(); var dataRange = sheet.getDataRange(); var bgColors = dataRange.getBackgrounds(); var values = dataRange.getValues(); var redColor = "#ff0000"; // 你的红色如果不是这个,换成对应十六进制代码 var greenCol = 5; // 假设绿色单元格在第5列,改成你实际的列号(A=1,B=2...) for (var row = 0; row < bgColors.length; row++) { var sum = 0; // 遍历每行除绿色列外的单元格 for (var col = 0; col < greenCol - 1; col++) { if (bgColors[row][col] == redColor) { sum += values[row][col] || 0; } } sheet.getRange(row+1, greenCol).setValue(sum); } }
- 保存后点编辑器顶部的运行按钮,授权权限后等待运行完成,所有绿色单元格会自动填入求和结果
小提示:如果不知道红色单元格的十六进制代码,可以选中一个红色单元格,在脚本编辑器里临时写个
Logger.log(SpreadsheetApp.getActiveSheet().getActiveCell().getBackground()),运行后看日志就能拿到颜色代码。
内容的提问来源于stack exchange,提问作者ErroR
相关产品推荐
相关产品推荐

