Formule-uitdaging - verschil met laatste invoer - Puzzel

Inhoudsopgave

De context

Een paar weken geleden had ik een interessante vraag van een lezer over het bijhouden van gewichtstoename of -verlies in een eenvoudige tabel.

Het idee is om elke dag een nieuw gewicht in te voeren en het verschil met de vorige dag te berekenen. Als elke dag een invoer heeft, is de formule eenvoudig:

Het verschil wordt berekend met een formule als deze, ingevoerd in D6 en naar beneden gekopieerd in de tabel:

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

Als er echter een of meer dagen worden gemist, gaat het mis en heeft het berekende resultaat geen zin:

Nee, u bent niet op één dag 157 pond aangekomen

Het probleem is dat de formule de lege cel gebruikt in de berekening, die resulteert in nul. Wat we nodig hebben, is een manier om het laatste gewicht dat in kolom C is geregistreerd, te lokaliseren en te gebruiken.

De uitdaging

Welke formule berekent een verschil met de laatste invoer, zelfs als er dagen zijn overgeslagen?

Gewenst resultaat - verschil met de laatste vorige invoer

Veronderstellingen

  1. Een enkele formule wordt ingevoerd in D6 en naar beneden gekopieerd (dwz dezelfde formule in alle cellen)
  2. De formule moet een of meer eerdere lege vermeldingen verwerken
  3. Het verwijderen van blanco items (rijen) is niet toegestaan
  4. Geen hulpkolommen toegestaan

Opmerking: een voor de hand liggend pad is om een ​​geneste ALS-formule te gebruiken. Ik zou dit ontmoedigen, omdat het niet goed zal schalen om een ​​onbekend aantal opeenvolgende blanco items te verwerken.

Heeft u een oplossing? Laat hieronder een opmerking achter met uw voorgestelde formule.

Ik heb zelf een formule gehackt en ik deel mijn oplossing nadat ik de slimme lezers wat tijd heb gegeven om hun eigen formules in te dienen.

Extra krediet

Op zoek naar meer uitdaging? Hier is hetzelfde resultaat, met een aangepaste getalnotatie toegepast. Wat is het nummerformaat? Hint: ik veegde dit van Mike Alexander op zijn Bacon Bits-blog.

Antwoord (klik om uit te vouwen)

Hieronder staan ​​echt goede voorgestelde oplossingen, waaronder een zeer compacte en elegante oplossing van Panagiotis Stathopoulos. Voor de goede orde, ik ging met een ZOEKEN en een uitbreidend bereik:

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

De werking van LOOKUP voor dit soort problemen wordt in dit voorbeeld uitgelegd.

Interessante artikelen...