Janela deslizante variável no Excel

Janela deslizante variável no Excel

Estou usando o Excel 2010, mas presumo que isso seria resolvido da mesma forma em qualquer versão do Excel.

Tenho dados que gostaria de somar - fornecendo essencialmente um valor cumulativo móvel. Por exemplo, em uma tabela com 1.000 linhas, gostaria de uma coluna mostrando a soma do valor da linha atual e das X linhas anteriores, onde X é um número que gostaria de especificar em outra célula. Por exemplo, o valor cumulativo das últimas 6 linhas ou as últimas 5 ou 8 ou qualquer outra coisa.

Tentei várias combinações usando ADDRESS e INDIRECT, INDEX, etc. - mas nada pareceu funcionar.

Aqui está um exemplo mostrando os resultados desejados, onde o tamanho da janela é 2:

  |A     |B
1 |Value |Cumulative
2 | 1    |   
3 | 2    |3
4 |15    |17
5 |10    |25
6 |11    |21
7 | 8    |19

e para tamanho de janela 3

  |A     |B
1 |Value |Cumulative
2 | 1    |   
3 | 2    |
4 |15    |18
5 |10    |27
6 |11    |36
7 | 8    |29

Como eu disse, gostaria que o tamanho da janela fosse especificado em outra célula da planilha (por exemplo, chamada "WindowSize").

Se o tamanho da janela for tal que ultrapasse os dados válidos, seria bom se retornasse um valor em branco ou 0 - mas isso não é essencial. Não me importo de ignorar #Refs ou ajustar manualmente o início da coluna para dar conta disso.

Gostaria de acreditar que isso pode ser feito com uma fórmula e sem a necessidade de recorrer ao visual básico. Pode?

Obrigado, Yosh

Responder1

Aqui está o método de índice:

=IF(ROW(1:1)<$E$1,"",SUM(INDEX(A:A,(ROW()-$E$1)+1):INDEX(A:A,ROW())))

INDEX é uma função não volátil, pois só recalcula quando os dados a que se refere mudam.

AmbosOFFSET() e INDIRETO()são funções voláteis. A função volátil calcula sempre que o Excel recalcula. Portanto, se houver muitos deles, os cálculos ficarão mais lentos com cálculos desnecessários.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Responder2

Isso deve funcionar na célula B2:

=SUM(A2:INDIRECT(ADDRESS(ROW(A2)-($D$2-1),1,4)))

O valor da janela está em cell $D$2.

Responder3

Eu usaria a função offset

=sum(offset(A2,0,0,D1))

onde D1 contém o número de linhas.

informação relacionada