Estou com problemas para conceber uma fórmula que me permita calcular a receita com base no atraso da receita em 1 mês e, em seguida, na planificação da receita por 12 meses.
Esta é minha planilha:
Os dados base para pedidos de 2018 estão em células F6:Q9
.
Os dados base para pedidos de 2019 estão em células S6:AD9
.
Atualmente, há um pedido para março de 2018 (célula H6
) e o perfil da receita deve apresentar um atraso de 1 mês, para que não haja receita para abril, mas a partir de maio de 2018, o pedido de março de £ 20.000 começará a refletir £ 1.667 (até abril 2019).
A fórmula também precisaria levar em conta os pedidos de F6:Q9
(pedidos de 2018) e de S6:AD9
(pedidos de 2019).
Na célula I1
, entrei 1
(para refletir o atraso de um mês).
Na célula I2
, entrei 12
(para refletir o número de meses em que a receita precisa ser plana).
O perfil da receita começa na célula AE6
e é aqui que estou tendo problemas para determinar qual fórmula usar.
Tentei usar uma fórmula de deslocamento, mas não consegui fazê-la funcionar. Não sei como abordar a solução.
Respostas:
A fórmula necessária é uma fórmula de matriz um pouco complicada.
Aqui está sua planilha com a fórmula que mostra os resultados esperados:
Essa fórmula precisa ser inserida na matriz e, em
AE6
seguida, preenchida / copiada e colada, à direita, na medida do necessário):Explicação:
A versão pré-modificada da fórmula é a seguinte:
A fórmula é muito mais fácil de entender se você considerar que por um período de 12 meses e um atraso de 1 mês, o segundo argumento do primeiro
INDEX()
é aproximadamente equivalente a:A fórmula basicamente funciona gerando uma matriz de compensações para acessar os pedidos do
I2
número anterior de meses, atrasados porI1
meses, em relação à célula atual.Percorrer a fórmula em
AK6
deve tornar o acima claro:COLUMN(INDEX(6:6,1):INDEX(6:6,$I$2))
→
{1,2,3,4,5,6,7,8,9,10,11,12}
COLUMN()-(COLUMN($AE:$AE)-COLUMN($F:$F))-{1,2,3,4,5,6,7,8,9,10,11,12}-$I$1
→
{37}-({31}-{6})-{1,2,3,4,5,6,7,8,9,10,11,12}-1
→
{10,9,8,7,6,5,4,3,2,1,0,-1}
N(IF(1,{10,9,8,7,6,5,4,3,2,1,0,-1}))
→
N({10,9,8,7,6,5,4,3,2,1,0,-1})
→
{10,9,8,7,6,5,4,3,2,1,0,-1}
{10,9,8,7,6,5,4,3,2,1,0,-1}+({10,9,8,7,6,5,4,3,2,1,0,-1}>=COLUMN($R:$R))
→
{10,9,8,7,6,5,4,3,2,1,0,-1}+({10,9,8,7,6,5,4,3,2,1,0,-1}>={18})
→
{10,9,8,7,6,5,4,3,2,1,0,-1}+{0,0,0,0,0,0,0,0,0,0,0,0}
→
{10,9,8,7,6,5,4,3,2,1,0,-1}
INDEX((6:6),{10,9,8,7,6,5,4,3,2,1,0,-1})/$I$2
→
INDEX(6:6,{10,9,8,7,6,5,4,3,2,1,0,-1})/12
→{24000,0,20000,0,0,"Opportunity Name1","bWmd1","Col C val","Col B val","Col A val","Col A val",#VALUE!}/12
→
{2000,0,1666.67,0,0,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}
SUM(IFERROR({2000,0,1666.67,0,0,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!},0))
→
2666.67
INDEX(6:6,N(IF(1,expression)))
é um hack necessário * para forçar o Excel a retornar uma matriz,expression
pois o segundo argumento deINDEX()
é avaliado como um único valor por padrão. Usar just in levaria aINDEX(6:6,expression)
AK6
INDEX((6:6),COLUMN()-(COLUMN($AE:$AE)-COLUMN($F:$F))-COLUMN(INDEX(6:6,1):INDEX(6:6,$I$2))-$I$1+(COLUMN()-(COLUMN($AE:$AE)-COLUMN($F:$F))-COLUMN(INDEX(6:6,1):INDEX(6:6,$I$2))-$I$1>=COLUMN($R:$R)))
→
INDEX(6:6,37-(31-6)-COLUMN($A$6:$L$6)-1+(37-(31-6)-COLUMN($A$6:$L$6)-1>=18))
→ → →
INDEX(6:6,12-1-1+(12-1-1>=18))
INDEX(6:6,10)
24000
como dentro de uma expressão retornando um único valor, retorna a coluna da primeira célula do intervalo.
COLUMN(multi-cell-range)
Ele
+(COLUMN()-(COLUMN($AE:$AE)-COLUMN($F:$F))-COLUMN(INDEX(6:6,1):INDEX(6:6,$I$2))-$I$1>=COLUMN($R:$R))
ajusta a diferença entre as tabelas de pedidos para 2018 e 2019 (colunaR
). Observe que oN(IF(
hack não é necessário neste caso, pois o hack usado anteriormente já forçou uma avaliação de matriz do segundo argumento deINDEX
e, portanto, aCOLUMN()
função é avaliada em matrizes.A
IFERROR()
função é necessária caso a fórmula exista em uma célula próxima ao lado esquerdo da planilha, resultando no acesso ao texto ou na tentativa de acessar uma célula à esquerda da colunaA
.Notas:
(6:6)
na versão prettificada são obrigados a forçar a6:6
permanecer em sua própria linha.Ressalvas:
I2
). Se houver números, a fórmula, como está, os incluirá no cálculo da receita.R:R
) deve permanecer exatamente com uma coluna de largura. Caso contrário, a fórmula, como está, será quebrada.* A explicação exata do motivo pelo qual o hack funciona terá que esperar até que eu descubra primeiro ;-)
fonte