Somme Cumulative Sans Script

35

Pour cette question, j'ai créé une fonction de script Google Apps, qui calcule la somme cumulée d'une plage. Martin Hawksey sur Google+ a commenté un moyen plus efficace de calculer la somme cumulée:

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

Ma question est la suivante: cela peut-il être réalisé avec l'utilisation de la formule?

Jacob Jan Tuinstra
la source
Toutes mes excuses pour une réponse très tardive, je viens de voir qu'il a enfilé "Related" à droite.
AdamL

Réponses:

30

Oui:

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

Exemple de somme cumulée

Les nombres dans le cercle vert sont ceux qui sont résumés, la formule ArrayFormula remplit toutes les autres en fonction de la cellule dans laquelle elle a été collée. Dans cet exemple, j'ai collé dans A11, B1 et C1 pour montrer son effet.

Ce tableur que j'ai préparé il y a quelque temps tente d'expliquer comment MMULT peut être utilisé pour résoudre ce type de problèmes. Il présente également la solution SUMIF sur l'une des feuilles, qui peut (et devrait probablement) être utilisée dans des cas particuliers comme celui-ci. dans cette question.

AdamL
la source
J'ai pris cette formule une fois (je pense que c'était la vôtre) sur le forum Google: SUMIF (ROW (A: A); "<" et ROW (A: A)), cela n'a pas fonctionné. Celui-ci fait.
Jacob Jan Tuinstra
L'image dans la réponse a été modifiée par un autre membre: + Xavier Casto
AdamL
1
@Fogest, j'ai utilisé un produit appelé "Snagit" pour en savoir plus sur techsmith.com/download/snagit
Xavier Casto
@XavierCasto Oh, j'ai utilisé cela il y a très longtemps, je ne m'en souvenais pas, même si c'était il y a longtemps. Merci pour la réponse cependant, j'aime les produits de techsmith.
ComputerLocus
31

En supposant que vous voulez:

  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)

etc...

Ensuite, vous pouvez utiliser: =sum($A$1:A1)A1est le début des nombres à additionner. Mettez cette formule B1(ou où vous voulez) et remplissez-la, et toutes les cellules y seront ajoutées , y compris la ligne dans laquelle vous vous trouvez. Alternativement, vous pouvez utiliser le =Ax+Bx-1format (x = ligne actuelle, données en A, somme cumulative en B) de la section "Formule de B" ci-dessus.

Farfromunique
la source
7
Cela semble fonctionner et est beaucoup plus simple que la réponse acceptée
K Raphael
1
d'accord, c'est plus simple et ça fonctionne sans couture!
loretoparisi
1

Bien que la réponse acceptée soit immédiate, elle présente un inconvénient majeur en raison du fait que le dernier paramètre de SUMIFdoit toujours être une "plage valide". Par conséquent, MMULTla meilleure option est le calcul du total en cours d'exécution plus avancé :

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

0

utilisateur0
la source