如何计算 ArrayFormula 中每一行的最后 7 行的总和?

How to I calculate the sum of the last 7 rows, for each row, inside an ArrayFormula?

我有一个包含数值的 D 列,在相邻的列上,我想显示相对于当前行的最后 7 行的总和。

我尝试了几个变体,其中大部分的灵感来自 Whosebug 和其他网站,但它们并没有像我需要的那样起作用。

我认为由于 Offset() 创建了一个范围,所以只需 "slice" 我需要的范围并将其提供给 sum()

就很简单了

ArrayFormula( Sum(Offset(D7:D500,-6,1,7,1)) )

但是,它似乎只计算我放置这个公式的单元格。

我根据自己的情况采用了网上找到的潜在解决方案

ArrayFormula(SUMIF(ROW(D7:D500),"<="&ROW(D7:D500),D7:D500))

这个计算前面所有行的总和, 所以我认为使用 SUMIFS() 可以得到我需要的东西,因此

=ArrayFormula(SUMIFS(D7:D500, ROW(D7:D500),"<="&ROW(D7:D500), ROW(D7:D500),">"&ROW(D7:D500)-7))

但这一个行不通。 我也尝试过使用 Address() 和 Interpret() 创建范围,但它们似乎在 ArrayFormula()

中无法正常工作

我对它还很陌生,所以可能只是我没有正确使用它们。我在这里做错了什么?有更好的方法吗?如果可能,我宁愿使用 ArrayFormula(),因为公式将存在于单个单元格中。

方法一.OFFSET函数

COUNT(D7:D500)-7 告诉 EXCEL 要从 D7 下调多少个单元格。

=SUM(OFFSET(D7:D500,COUNT(D7:D500)-7,,7,1))

没有Ctrl+Shift+Enter

方法二.Index函数

如果担心OFFSET函数的易变性,可以试试

=SUM(INDEX(D7:D500,COUNT(D7:D500)-6):INDEX(D7:D500,COUNT(D7:D500)))

没有Ctrl+Shift+Enter

尝试:

=SUM(IFERROR(QUERY(D7:D500, "limit 7 offset "&COUNTA(D7:D500)-7)))

您可以通过在 Google Apps 脚本中创建的 custom function 来完成此操作。为此,请按照下列步骤操作:

  • 在您的电子表格中,select工具 > 脚本编辑器打开绑定到您的文件的脚本。
  • 在脚本编辑器中复制此函数,并保存项目:
function SUM7ROWS(input) {
  var output = [];
  var sum;
  for (var row = 0; row < input.length; row++) {
    sum = 0;
    for (var i = 6; i >= 0; i--) {
      if (row - i >= 0) {
        sum = sum + Number(input[row - i]);
      }
    }
    output.push(sum);
  }
  return output;
}
  • 现在,如果您返回电子表格,就可以像使用任何其他函数一样使用此函数。您只需提供适当的范围作为参数(在本例中为 D7:D500),如您在此处所见:

希望对您有所帮助。