我的范围如下图所示:
顶部标题代表一年中的月份(1-12),左栏代表一个月中的天数(1至28/29/30/31)。
我想在我的范围的最后30天执行SUM函数,使它从最后一个非空值开始计数并上升直到达到该列的第一个值,然后如果仍然存在要计算的天数,转到上个月并从最后一个值开始计算。
例如,在图像中,如果我想要该范围的最后6个单元格的值的总和,则它将总计为16,12,8,4,4和15。
我已经尝试将解决方案调整为here概述的类似问题,但到目前为止我还未能将其解决。
答案 0 :(得分:1)
使用this question about iterating over a range using Google Script的解决方案,我能够设计一个工作脚本。
脚本将从范围的最后一个单元格向后迭代特定数量的单元格(它在移动到上一列之前迭代列的所有行),跳过空单元格,并将遇到的值的总和返回到a新细胞。
function sumOfLast30() {
var range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
var numRows = range.getNumRows(); // 2
var numCols = range.getNumColumns(); // 2
var counter = 0;
var counterMax = 2; // this determines how many cells get counted
var sumValues = 0;
for (var i = numCols; i > 0; i--)
{
if (counter == counterMax) {
break;
}
for (var j = numRows; j > 0; j--) {
var selectedValue = range.getCell(j,i).getValue();
if (selectedValue != "")
{
sumValues = sumValues + selectedValue;
counter++;
if (counter == counterMax)
{
break;
}
}
}
}
var target = SpreadsheetApp.getActiveSheet().getRange("C3");
target.setValue(sumValues);
}