在 Google 工作表中使用数组公式滚动求和
Rolling sum with array formula in Google Sheets
我有下面的数据集。 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 中向下的每个单元格中?
我有一个 使用计数并得到了这个解决方案:
=ArrayFormula(filter(countifs(B2:B,">0",row(B2:B),"<="&row(B2:B),row(B2:B),">"&row(B2:B)-5),A2:A<>""))
我可以修改它以求和吗?
尝试:
=ARRAYFORMULA(SUMIF(ROW(B2:B), "<="&ROW(B2:B), B2:B))
您可以通过在 Google Apps 脚本中创建的 custom function 来完成此操作。为此,请按照下列步骤操作:
- 在您的电子表格中,select工具 > 脚本编辑器 打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
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
)作为参数,如您在此处所见:
参考:
如果你愿意,你也可以用两个滚动总和的差来计算:
=ArrayFormula(filter(sumif(row(B2:B),"<="&row(B2:B),B2:B)-sumif(row(B2:B),"<="&row(B2:B)-5,B2:B),A2:A<>""))
我有下面的数据集。 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 中向下的每个单元格中?
我有一个
=ArrayFormula(filter(countifs(B2:B,">0",row(B2:B),"<="&row(B2:B),row(B2:B),">"&row(B2:B)-5),A2:A<>""))
我可以修改它以求和吗?
尝试:
=ARRAYFORMULA(SUMIF(ROW(B2:B), "<="&ROW(B2:B), B2:B))
您可以通过在 Google Apps 脚本中创建的 custom function 来完成此操作。为此,请按照下列步骤操作:
- 在您的电子表格中,select工具 > 脚本编辑器 打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
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
)作为参数,如您在此处所见:
参考:
如果你愿意,你也可以用两个滚动总和的差来计算:
=ArrayFormula(filter(sumif(row(B2:B),"<="&row(B2:B),B2:B)-sumif(row(B2:B),"<="&row(B2:B)-5,B2:B),A2:A<>""))