繁体   English   中英

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

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

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

我已经尝试了几个变体,其中大部分都受到 StackOverflow 和其他网站的启发,但它们并没有按照我的需要工作。

我认为由于 Offset() 创建了一个范围,因此只需“切片”我需要的范围并将其提供给 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)))

0

您可以通过在 Google Apps 脚本中创建的自定义函数来完成此操作。 为此,请执行以下步骤:

  • 在电子表格中,选择工具 > 脚本编辑器以打开绑定到文件的脚本。
  • 在脚本编辑器中复制此函数,并保存项目:
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 ),如下所示:

在此处输入图片说明

我希望这有任何帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM