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?


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.