没有脚本的累计总和


35

对于这个问题,我创建了一个Google Apps脚本函数,该函数计算范围的累计和。Google+上的马丁·霍克西Martin Hawksey)评论了一种更有效的累计金额计算方法:

function cumulativeSum(array){
  var output = [];
  for (i in array){
    if(i==0) {
      if (array[i].length > 1) throw ("Only single column of data");
      output.push([array[i][0]]);
    } else {
      output.push([output[i-1][0] + array[i][0]]);
    }
  }
  return output;
}

我的问题是:这可以通过公式的使用来实现吗?


抱歉很晚才回答,我只是看到他插在右边的“相关”中。
AdamL 2013年

Answers:


30

是:

=ArrayFormula(SUMIF(ROW(A1:A10);"<="&ROW(A1:A10);A1:A10))

累计金额示例

绿色圆圈中的数字是要累加的数字,ArrayFormula将根据粘贴到的单元格填充所有其他数字,在此示例中,我粘贴了A11,B1和C1以显示其效果。

我之前制作的这张电子表格试图解释如何将MMULT用于此类问题,并且还在其中一张纸上演示了SUMIF解决方案,该解决方案可以(可能应该)用于像这样的特殊情况。在这个问题上。


我曾经在Google论坛上使用过这个公式(我认为是您的公式):SUMIF(ROW(A:A);“ <”&ROW(A:A)),该方法无效。这一个。
Jacob Jan Tuinstra 2013年

答案中的图像由另一位成员编辑:+ Xavier Casto
AdamL 2013年

1
@Fogest,我使用了一个名为“ Snagit”的产品,可在techsmith.com/download/snagit上
Xavier Casto

@XavierCasto哦,我很久以前就用过这个,虽然很久以前就不记得有这个了。不过,感谢您的答复,我喜欢techsmith的产品。
ComputerLocus

31

假设您要:

  Row | A | B | B's formula
  --------------------------------
   1  | 1 | 1 | =1     (or =A1)
   2  | 2 | 3 | =1+2   (or =A2+B1)
   3  | 3 | 6 | =1+2+3 (or =A3+B2)

等等...

然后,您可以使用:=sum($A$1:A1)在哪里A1是要加和的数字的开头。将公式放在B1(或任何您想要的位置)并填写下来,它将汇总所有单元格,包括您所在的行。或者,您可以使用=Ax+Bx-1上面“ B的公式”部分中的(x =当前行,A中的数据,B中的累加总和)格式。


7
这似乎有效,并且比公认的答案简单得多
K Raphael

1
同意,这更简单并且可以无缝运行!
loretoparisi

1

尽管可以接受的答案是SUMIF当下的,但它的主要缺点是,需求的最后一个参数必须始终是“有效范围”,因此,对于一些更高级的运行总计计算,MMULT是个更好的选择:

=ARRAYFORMULA(IF(LEN(A1:A), 
 MMULT(TRANSPOSE((ROW(A1:A)<=TRANSPOSE(ROW(A1:A)))*A1:A), SIGN(A1:A)^2), ))

0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.