web-dev-qa-db-ja.com

スクリプトなしの累積合計

this 質問の場合、範囲の累積合計を計算するGoogle Apps Script関数を作成しました。 Martin Hawksey Google+で、累積合計を計算するより効率的な方法についてコメントしました。

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;
}

私の質問は:これは式の使用で達成できますか?

34

はい:

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

Example of Cumulative Sum

緑の円内の数字は合計され、ArrayFormulaは貼り付けられたセルに基づいて他のすべてを埋めています。この例では、効果を示すためにA11、B1、C1に貼り付けました。

このスプレッドシート MMULTがこれらの種類の問題にどのように使用できるかを説明しようと少し前に作成しました。また、シートの1つでSUMIFソリューションを示しています。この質問のような特別な場合に使用されます。

28
AdamL

あなたが望むと仮定:

  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(または必要な場所)に入れて記入すると、すべてのセルが合計されます最大値を含む現在の行。または、上記の「Bの式」セクションの=Ax+Bx-1(x =現在の行、Aのデータ、Bの累積合計)形式を使用できます。

28
Farfromunique

受け入れられた答えはその場にありますが、SUMIFの最後のパラメーターは常に「有効な範囲」である必要があるため、大きな欠点があります。より高度な積算合計計算MMULTの方が良いオプションです。

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

0

0
user0