【问题标题】:Get the range of the last X rows in Google Sheets获取 Google 表格中最后 X 行的范围
【发布时间】:2011-04-25 14:13:01
【问题描述】:

假设我有一个包含 18 行的电子表格,我可以硬编码 D 列中最后 7 个值的范围,并像这样平均它们的值:

=AVERAGE(D12:D18)

如果不对它们进行硬编码,我怎么能做同样的事情,所以当我添加更多行时它会起作用?

【问题讨论】:

    标签: google-sheets average


    【解决方案1】:

    如果您想计算平均值或总和,则无需脚本。您也可以使用数组过滤器来完成此操作。以下公式计算 A 列最后 7 行的平均值:

    =AVERAGE(FILTER(A:A;ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-7+1)))
    

    这假定数据从第 1 行开始。否则,您必须将公式中的后一个常量更改为数据开始的行号。

    【讨论】:

      【解决方案2】:

      事实证明,您可以使用自己的代码。凌乱,但它有效:

      function lastValues(column, num) {
        var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
        var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
      
        for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {};
      
        arr = [];
      
        for(i=0; i < num+1; i++){
          arr.push(values[lastRow - i]);
        };
      
        return arr;
      };
      

      【讨论】:

      • 它抱怨 - 参数必须是范围!
      【解决方案3】:

      您也可以像 Webapps.SO answer 那样使用 OFFSET() 来聚合一行的最后 X 个单元格。

      相反——聚合一列的最后 X 个单元格——偏移参数只需要四处移动。下面的命令应该适用于您的示例(假设您的数据从 D2 开始到 D18):

      =iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0)
      

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        相关资源
        最近更新 更多