Soma cumulativa sem script

35

Para esta pergunta, criei uma função Script do Google Apps, que calcula a soma cumulativa de um intervalo. Martin Hawksey no Google+ fez um comentário sobre uma maneira mais eficiente de calcular a soma 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;
}

Minha pergunta é: isso pode ser alcançado com o uso de fórmulas?

Jacob Jan Tuinstra
fonte
Pedimos desculpas por uma resposta muito tardia. Acabei de ver que ele escreveu "Related" à direita.
AdamL

Respostas:

30

Sim:

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

Exemplo de soma acumulada

Os números no círculo verde são os que estão sendo somados; a ArrayFormula está preenchendo todos os outros com base na célula em que foi colada; neste exemplo, colei em A11, B1 e C1 para mostrar seu efeito.

Esta planilha que fiz há um tempo atrás tenta explicar como o MMULT pode ser usado para esse tipo de problema, e também demonstra a solução SUMIF em uma das planilhas, que pode (e provavelmente deveria) ser usada para casos especiais como o nesta pergunta.

AdamL
fonte
Peguei essa fórmula uma vez (acho que era sua) no Fórum do Google: SUMIF (ROW (A: A); "<" & ROW (A: A)), que não funcionou. Este faz.
Jacob Jan Tuinstra
A imagem na resposta foi editada por outro membro: + Xavier Casto
AdamL 4/13/13
11
@Fogest, eu usei um produto chamado "Snagit" descobrir mais sobre a techsmith.com/download/snagit
Xavier Casto
@XavierCasto Oh, eu usei isso há muito tempo, não me lembro de ter isso, embora tenha sido há muito tempo. Obrigado pela resposta, porém, eu gosto de produtos da techsmith.
ComputerLocus
31

Supondo que você queira:

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

Então você pode usar: =sum($A$1:A1)onde A1é o início dos números para somar. Coloque essa fórmula B1(ou onde você quiser) e preencha-a, e ela somará todas as células até a linha em que você está incluindo . Como alternativa, você pode usar o formato =Ax+Bx-1(x = linha atual, dados em A, soma acumulada em B) na seção "Fórmula de B" acima.

Farfromunique
fonte
7
Isso parece funcionar e é muito mais simples do que a resposta aceita
K Raphael
11
concordado, isso é mais simples e funciona perfeitamente!
loretoparisi
1

Embora a resposta aceita esteja no local, ela apresenta uma grande desvantagem, pois o último parâmetro de SUMIFprecisa sempre ser um "intervalo válido"; portanto, quando se trata de um cálculo total em execução mais avançado, MMULTé a melhor opção:

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

0 0

user0
fonte