Fórmula para calcular a receita fixa em 12 meses após um atraso de 1 mês

1

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:

Captura de tela da 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 AE6e é 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.

u65646
fonte
você pode compartilhar sua planilha?
usar o seguinte comando
Faça o upload da Planilha e da fórmula com a qual você já usou !!
Rajesh S

Respostas:

0

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:

Captura de tela da planilha

Essa fórmula precisa ser inserida na matriz e, em AE6seguida, preenchida / copiada e colada, à direita, na medida do necessário):

{=SUM(IFERROR(INDEX(6:6,N(IF(1,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)))/$I$2,0))}

Explicação:

A versão pré-modificada da fórmula é a seguinte:

{=
SUM(
  IFERROR(
    INDEX(
      (6:6),
      N(IF(1,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))
    )/$I$2,
    0
  )
)}

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:

COLUMN()-(COLUMN($AE:$AE)-COLUMN($F:$F))-{1,2,3,4,5,6,7,8,9,10,11,12}-1

A fórmula basicamente funciona gerando uma matriz de compensações para acessar os pedidos do I2número anterior de meses, atrasados ​​por I1meses, em relação à célula atual.


Percorrer a fórmula em AK6deve 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, expressionpois o segundo argumento de INDEX()é 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 (coluna R). Observe que o N(IF(hack não é necessário neste caso, pois o hack usado anteriormente já forçou uma avaliação de matriz do segundo argumento de INDEXe, portanto, a COLUMN()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 coluna A.

Notas:

  • A fórmula prettificada realmente funciona se inserida.
  • Os colchetes (6:6)na versão prettificada são obrigados a forçar a 6:6permanecer em sua própria linha.

Ressalvas:

  • Não pode haver números nas células das n colunas à esquerda dos pedidos (em que n é especificado pelo valor em I2). Se houver números, a fórmula, como está, os incluirá no cálculo da receita.
  • Não pode haver diferença entre as colunas Receita de dezembro de 2018 e Receita de janeiro de 2019. A fórmula pode ser modificada para permitir essa lacuna, se desejar.
  • O espaço entre as duas tabelas de pedidos ( R:R) deve permanecer exatamente com uma coluna de largura. Caso contrário, a fórmula, como está, será quebrada.
  • O espaço entre as tabelas entre ordens não pode conter números. Caso contrário, eles serão tratados como pedidos adicionais.

* A explicação exata do motivo pelo qual o hack funciona terá que esperar até que eu descubra primeiro ;-)

robinCTS
fonte