EDIT: Embora a fórmula anterior desnecessariamente complicada (veja esta revisão ) ainda seja útil, por exemplo, se um o fator de escala deslizante era necessário para ser aplicado às entradas, eu substituí-lo nesta resposta com a versão nova, mais simples, muito mais fácil de entender.
Aqui está uma solução não VBA que não requer linhas / colunas auxiliares ou tabelas extras:
Array:introduzaaseguintefórmulaemB3
e,emseguida,preencha-aàdireita:
{=SUM(IFERROR(INDEX($2:$2,N(IF(1,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1))))/$A$5,0))}
Explicação:
A versão prettificada da fórmula é a seguinte:
{=
SUM(
IFERROR(
INDEX(
($2:$2),
N(IF(1,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1)))
)/$A$5,
0
)
)}
A fórmula é muito mais fácil de entender se você considerar que para n = 5, o segundo argumento do primeiro INDEX()
é efetivamente equivalente a:
COLUMN()-{0,1,2,3,4}
Ele basicamente funciona gerando um array de comprimento variável (baseado em n, armazenado em A5
no meu exemplo) para acessar o n-1 anterior, mais os valores de entrada atuais.
Percorrendo a fórmula em I3
deve-se esclarecer:
-
(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1)
→{1,2,3,4,5}-1
→{0,1,2,3,4}
-
COLUMN()-{0,1,2,3,4}
→{9}-{0,1,2,3,4}
→{9,8,7,6,5}
-
N(IF(1,{9,8,7,6,5}))
→N({9,8,7,6,5})
→{9,8,7,6,5}
-
(INDEX($2:$2,{9,8,7,6,5})/$A$5
→{100000,0,0,0,7}/5
→{20000,0,0,0,1.4}
-
SUM(IFERROR({20000,0,0,0,1.4},0))
→20001.40
INDEX($2:$2,N(IF(1,expression)))
é um hack * necessário para forçar o Excel a retornar uma matriz para expression
, já que o segundo argumento de INDEX()
é avaliado como um único valor por padrão. Usando apenas INDEX($2:$2,expression)
em I3
levaria a
INDEX($2:$2,COLUMN()-(COLUMN(INDEX(3:3,1):INDEX(3:3,$A$5))-1))
→ INDEX($2:$2,9-(COLUMN($A$3:$E$3)-1))
→ INDEX($2:$2,9-(1-1))
→ INDEX($2:$2,9)
→ 100000
desde que dentro de uma expressão retornando um único valor, COLUMN(multi-cell-range)
retorna a coluna da primeira célula do intervalo.
A função IFERROR()
é necessária caso a fórmula exista em uma célula próxima ao lado esquerdo da planilha, resultando no acesso ao cabeçalho da linha ou na tentativa de acessar uma célula à esquerda da coluna A
.
Notas:
- A fórmula prettificada realmente funciona se inserida.
- Os parênteses em torno de
($2:$2)
na versão prettified são necessários para forçar o$2:$2
a permanecer em sua própria linha.
* A explicação exata do motivo pelo qual o hack funciona terá que esperar até eu descobrir por mim primeiro; -)