it-swarm.com.de

Kumulative Summe ohne Schrift

Für this question habe ich eine Google Apps Script-Funktion erstellt, die die kumulative Summe eines Bereichs berechnet. Martin Hawksey auf Google+ hat einen Kommentar zu einer effizienteren Methode zur Berechnung der kumulierten Summe abgegeben:

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

Meine Frage ist: kann dies mit der Verwendung von Formeln erreicht werden?

34

Ja:

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

Example of Cumulative Sum

Die Zahlen im grünen Kreis werden summiert. Die ArrayFormula füllt alle anderen Zahlen basierend auf der Zelle, in die sie eingefügt wurde. In diesem Beispiel habe ich A11, B1 und C1 eingefügt, um den Effekt zu veranschaulichen.

Diese Tabelle dass ich vor einiger Zeit versucht habe zu erklären, wie MMULT für diese Art von Problemen verwendet werden kann, und es zeigt auch die SUMIF-Lösung auf einem der Blätter, die sein kann (und wahrscheinlich sollte) wird für Sonderfälle wie den in dieser Frage genannten verwendet.

28
AdamL

Vorausgesetzt, Sie möchten:

  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)

usw...

Dann können Sie verwenden: =sum($A$1:A1) wobei A1 der Beginn der zu summierenden Zahlen ist. Fügen Sie diese Formel in B1 ein (oder wo immer Sie möchten) und füllen Sie sie aus, und es werden alle Zellen summiert bis zu und einschließlich die Zeile, in der Sie sich befinden. Alternativ können Sie den =Ax+Bx-1 (x = aktuelle Zeile, Daten in A, kumulative Summe in B) -Format aus dem obigen Abschnitt "B-Formel" verwenden.

28
Farfromunique

Während die akzeptierte Antwort vor Ort ist, hat dies einen großen Nachteil, da der letzte Parameter von SUMIF immer ein "gültiger Bereich" sein muss Wenn es um fortgeschrittenere laufende Gesamtberechnungen geht MMULT ist die bessere Option:

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

0

0
user0