在Google表格中获取范围的最后X个非空行

时间:2016-12-14 16:03:57

标签: google-sheets spreadsheet google-sheets-api

我的范围如下图所示:

Google Sheets Range

顶部标题代表一年中的月份(1-12),左栏代表一个月中的天数(1至28/29/30/31)。

我想在我的范围的最后30天执行SUM函数,使它从最后一个非空值开始计数并上升直到达到该列的第一个值,然后如果仍然存在要计算的天数,转到上个月并从最后一个值开始计算。

例如,在图像中,如果我想要该范围的最后6个单元格的值的总和,则它将总计为16,12,8,4,4和15。

我已经尝试将解决方案调整为here概述的类似问题,但到目前为止我还未能将其解决。

1 个答案:

答案 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);
}