Desafio de fórmula - diferença em relação à última entrada - Enigma

Índice

O contexto

Algumas semanas atrás, eu tive uma pergunta interessante de um leitor sobre monitorar o ganho ou perda de peso em uma mesa simples.

A ideia é inserir um novo peso a cada dia e calcular a diferença do dia anterior. Quando todo dia tem uma entrada, a fórmula é direta:

A diferença deve ser calculada com uma fórmula como esta, inserida em D6 e copiada para baixo na tabela:

=IF(C6"",C6-C5,"")

No entanto, quando um ou mais dias são perdidos, as coisas dão errado e o resultado calculado não faz sentido:

Não, você não ganhou 157 libras em um dia

O problema é que a fórmula usa a célula em branco no cálculo, que resulta em zero. O que precisamos é uma maneira de localizar e usar o último peso registrado na coluna C.

O desafio

Qual fórmula calculará a diferença da última entrada, mesmo quando os dias foram pulados?

Resultado desejado - diferença usando a última entrada anterior

Suposições

  1. Uma única fórmula é inserida em D6 e copiada (ou seja, a mesma fórmula em todas as células)
  2. A fórmula deve lidar com uma ou mais entradas em branco anteriores
  3. A remoção de entradas em branco (linhas) não é permitida
  4. Nenhuma coluna auxiliar permitida

Nota: um caminho óbvio é usar uma fórmula IF aninhada. Eu desencorajaria isso, já que não será bem escalonado para lidar com um número desconhecido de entradas em branco consecutivas.

Tem uma solução? Deixe um comentário com sua fórmula proposta abaixo.

Eu mesmo criei uma fórmula e compartilharei minha solução depois de dar aos leitores espertos algum tempo para enviar suas próprias fórmulas.

Crédito extra

Procurando por mais desafios? Aqui está o mesmo resultado, com um formato de número personalizado aplicado. Qual é o formato do número? Dica: eu peguei isso de Mike Alexander em seu blog Bacon Bits.

Resposta (clique para expandir)

Existem soluções propostas muito boas abaixo, incluindo uma solução muito compacta e elegante de Panagiotis Stathopoulos. Para o registro, eu escolhi um LOOKUP e um intervalo em expansão

=IF(C6"",C6-LOOKUP(2,1/($C$5:C5""),$C$5:C5),"")

A mecânica do LOOKUP para este tipo de problema é explicada neste exemplo.

Artigos interessantes...