Suma acumulativa sin guión

35

Para esta pregunta, he creado una función de Google Apps Script, que calcula la suma acumulativa de un rango. Martin Hawksey en Google+ hizo un comentario sobre una forma más eficiente de calcular la suma acumulativa:

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

Mi pregunta es: ¿ se puede lograr esto con el uso de fórmulas?

Jacob Jan Tuinstra
fuente
Disculpas por una respuesta muy tardía, acabo de verlo en "Relacionado" a la derecha.
AdamL

Respuestas:

30

Sí:

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

Ejemplo de suma acumulativa

Los números en el círculo verde son los sumados, ArrayFormula está poblando todos los demás en función de la celda en la que se pegó, en este ejemplo pegué en A11, B1 y C1 para mostrar su efecto.

Esta hoja de cálculo que hice hace un tiempo intenta explicar cómo MMULT se puede usar para este tipo de problemas, y también muestra la solución SUMIF en una de las hojas, que puede (y probablemente debería) usarse para casos especiales como el en esta pregunta

AdamL
fuente
Tomé esta fórmula una vez (creo que era tuya) en el Foro de Google: SUMIF (ROW (A: A); "<" & ROW (A: A)), eso no funcionó. Este sí.
Jacob Jan Tuinstra
La imagen en la respuesta fue editada por otro miembro: + Xavier Casto
AdamL
1
@Fogest, utilicé un producto llamado "Snagit" para obtener más información en techsmith.com/download/snagit
Xavier Casto
@XavierCasto Oh, lo he usado hace MUCHO tiempo, no recordaba que tuviera esto, aunque fue hace mucho tiempo. Sin embargo, gracias por la respuesta, me gustan los productos de techsmith.
ComputerLocus
31

Asumiendo que quieres:

  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 ...

Luego puede usar: ¿ =sum($A$1:A1)dónde A1está el comienzo de los números para sumar? Ponga esa fórmula B1(o donde quiera) y llénela, y sumará todas las celdas hasta la fila en la que se encuentra. Alternativamente, puede usar el =Ax+Bx-1formato (x = fila actual, datos en A, suma acumulativa en B) de la sección "Fórmula de B" anterior.

Farfromunique
fuente
77
Esto parece funcionar y es mucho más simple que la respuesta aceptada
K Raphael
1
De acuerdo, esto es más simple y funciona sin problemas.
loretoparisi
1

Si bien la respuesta aceptada está en el lugar, tiene una gran desventaja debido al hecho de que el último parámetro SUMIFdebe ser siempre un "rango válido", por lo que cuando se trata de un cálculo total más avanzado MMULTes la mejor opción:

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

0 0

usuario0
fuente