Somma cumulativa senza script


35

Per questa domanda, ho creato una funzione di script di Google Apps, che calcola la somma cumulativa di un intervallo. Martin Hawksey su Google+ ha commentato un modo più efficiente di calcolare la somma cumulativa:

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

La mia domanda è: questo può essere raggiunto con l'uso di formule?


Chiedo scusa per una risposta molto tardiva, ho appena visto che ha inserito "Correlati" sulla destra.
AdamL

Risposte:


30

Sì:

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

Example of Cumulative Sum

I numeri nel cerchio verde sono quelli che vengono sommati, ArrayFormula sta popolando tutti gli altri in base alla cella in cui è stato incollato, in questo esempio ho incollato in A11, B1 e C1 per mostrare il suo effetto.

Questo foglio di calcolo che ho fatto qualche tempo fa tenta di spiegare come MMULT può essere utilizzato per questo tipo di problemi e dimostra anche la soluzione SUMIF su uno dei fogli, che può (e probabilmente dovrebbe) essere usata per casi speciali come quello in questa domanda.


Ho preso questa formula una volta (penso che fosse tua) sul forum di Google: SUMIF (ROW (A: A); "<" & ROW (A: A)), che non ha funzionato. Questo lo fa.
Jacob Jan Tuinstra,

L'immagine nella risposta è stata modificata da un altro membro: + Xavier Casto
AdamL

1
@Fogest, ho usato un prodotto chiamato "Snagit" per saperne di più su techsmith.com/download/snagit
Xavier Casto

@XavierCasto Oh, l'ho usato TANTO tempo fa, non me lo ricordavo, anche se è stato tanto tempo fa. Grazie per la risposta, mi piacciono i prodotti di Techsmith.
ComputerLocus,

31

Supponendo che tu voglia:

  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)

eccetera...

Quindi puoi usare: =sum($A$1:A1)dov'è A1l'inizio dei numeri da sommare. Inserisci quella formula B1(o dove vuoi) e riempila, e somma tutte le celle fino alla riga in cui ti trovi. In alternativa, puoi utilizzare il formato =Ax+Bx-1(x = riga corrente, i dati in A, la somma cumulativa in B) dalla sezione "Formula di B" sopra.


7
Questo sembra funzionare ed è molto più semplice della risposta accettata
K Raphael

1
d'accordo, questo è più semplice e funziona senza problemi!
Loretoparisi,

1

Mentre la risposta accettata è sul posto, presenta uno svantaggio principale a causa del fatto che l'ultimo parametro di SUMIFdeve essere sempre un "intervallo valido", quindi quando si tratta di un calcolo totale parziale più avanzato MMULTè l'opzione migliore:

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

0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.