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?
google-sheets
google-apps-script
formulas
google-sheets-arrayformula
Jacob Jan Tuinstra
la source
la source
Réponses:
Oui:
=ArrayFormula(SUMIF(ROW(A1:A10);"<="&ROW(A1:A10);A1:A10))
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.
la source
En supposant que vous voulez:
etc...
Ensuite, vous pouvez utiliser:
=sum($A$1:A1)
oùA1
est le début des nombres à additionner. Mettez cette formuleB1
(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-1
format (x = ligne actuelle, données en A, somme cumulative en B) de la section "Formule de B" ci-dessus.la source
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
SUMIF
doit toujours être une "plage valide". Par conséquent,MMULT
la meilleure option est le calcul du total en cours d'exécution plus avancé :la source