【问题标题】:Rolling sum with array formula in Google Sheets在 Google 表格中使用数组公式滚动总和
【发布时间】:2020-08-10 15:36:25
【问题描述】:

我有下面的数据集。 Col1 给定数据,Col2 是 Col1 前 5 行(含)的滚动总和。

Date      Col1  Col2
01/04/20  2     2
02/04/20  1     3 
03/04/20  4     7
04/04/20        7
05/04/20        7
06/04/20  5     10
07/04/20  2     11
08/04/20        7
09/04/20        7
10/04/20  1     8
11/04/20        3
12/04/20        1
13/04/20        1
14/04/20        1
15/04/20  1     1

有没有办法使用 arrayformula 来做到这一点,而不是在 Col2 中的每个单元格中输入求和公式?

我有一个使用 count 的 similar question 并得到了这个解决方案:

=ArrayFormula(filter(countifs(B2:B,">0",row(B2:B),"<="&row(B2:B),row(B2:B),">"&row(B2:B)-5),A2:A<>""))

我可以修改这个以求总和吗?

【问题讨论】:

  • 我也希望用一个简单的平均平均值来做到这一点。会和count答案类似吗?

标签: arrays google-sheets sum array-formulas cumulative-sum


【解决方案1】:

尝试:

=ARRAYFORMULA(SUMIF(ROW(B2:B), "<="&ROW(B2:B), B2:B))

【讨论】:

  • 他们想要最后 5 行的滚动总和。 OP 应该添加指向我之前答案的链接 - 已编辑问题以包含此内容。
【解决方案2】:

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

  • 在您的电子表格中,选择工具 > 脚本编辑器以打开绑定到您的文件的脚本。
  • 在脚本编辑器中复制此函数,并保存项目:
function SUMROWS(input, number) {
  var output = [];
  var sum;
  for (var row = 0; row < input.length; row++) {
    sum = 0;
    for (var i = number - 1; i >= 0; i--) {
      if (row - i >= 0) {
        sum = sum + Number(input[row - i]);
      }
    }
    output.push(sum);
  }
  return output;
}
  • 现在,如果您返回到电子表格,您可以像使用任何其他功能一样使用此功能。您只需提供适当的范围(在本例中为 B2:B16)和之前要求和的行数(在本例中为 5)作为参数,如下所示:

参考:

【讨论】:

    【解决方案3】:

    如果你愿意,你也可以通过两个滚动总和的差来做到这一点:

    =ArrayFormula(filter(sumif(row(B2:B),"<="&row(B2:B),B2:B)-sumif(row(B2:B),"<="&row(B2:B)-5,B2:B),A2:A<>""))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2020-06-08
      相关资源
      最近更新 更多