【问题标题】:Get the last X non-empty rows of a range in Google Sheets获取 Google 表格中某个范围的最后 X 个非空行
【发布时间】:2017-04-30 01:05:02
【问题描述】:

我的范围如下图所示:

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

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

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

我已尝试使解决方案适应here 概述的类似问题,但到目前为止我无法使其工作。

【问题讨论】:

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


    【解决方案1】:

    使用this question about iterating over a range using Google Script 的解决方案,我能够设计一个工作脚本。

    脚本将从范围的最后一个单元格向后迭代特定数量的单元格(它在移动到上一列之前迭代列的所有行),跳过空单元格,并将遇到的值的总和返回到新单元格。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多