Wyzwanie formuły - różnica w stosunku do ostatniego wpisu - Puzzle

Spisie treści

Kontekst

Kilka tygodni temu miałem ciekawe pytanie od czytelnika dotyczące śledzenia przyrostu lub utraty wagi w prostym stole.

Chodzi o to, aby codziennie wprowadzać nową wagę i obliczać różnicę w stosunku do poprzedniego dnia. Kiedy każdy dzień ma wpis, wzór jest prosty:

Różnicę oblicza się za pomocą następującego wzoru, wprowadza do D6 i kopiuje w dół tabeli:

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

Jednak gdy brakuje jednego lub więcej dni, sprawy idą źle, a obliczony wynik nie ma sensu:

Nie, nie zyskałeś 157 funtów w jeden dzień

Problem polega na tym, że formuła korzysta z pustej komórki w obliczeniach, której wynikiem jest zero. Potrzebujemy sposobu, aby zlokalizować i wykorzystać ostatnią wagę zapisaną w kolumnie C.

Wyzwanie

Jaka formuła obliczy różnicę w stosunku do ostatniego wpisu, nawet jeśli dni zostały pominięte?

Pożądany wynik - różnica przy użyciu ostatniego poprzedniego wpisu

Założenia

  1. Pojedyncza formuła jest wprowadzana do D6 i kopiowana (tj. Ta sama formuła we wszystkich komórkach)
  2. Formuła musi obsługiwać jeden lub wiele poprzednich pustych wpisów
  3. Usuwanie pustych wpisów (wierszy) jest niedozwolone
  4. Żadne kolumny pomocnicze nie są dozwolone

Uwaga: jedną z oczywistych ścieżek jest użycie zagnieżdżonej formuły JEŻELI. Odradzam to, ponieważ nie będzie dobrze skalować do obsługi nieznanej liczby następujących po sobie pustych wpisów.

Masz rozwiązanie? Zostaw komentarz z proponowaną formułą poniżej.

Sam stworzyłem formułę i podzielę się swoim rozwiązaniem, gdy dam sprytnym czytelnikom trochę czasu na przesłanie własnych formuł.

Dodatkowy kredyt

Szukasz więcej wyzwań? Oto ten sam wynik po zastosowaniu niestandardowego formatu liczb. Jaki jest format liczb? Wskazówka: pobrałem to od Mike'a Alexandra na jego blogu Bacon Bits.

Odpowiedź (kliknij, aby rozwinąć)

Poniżej znajdują się naprawdę dobre propozycje rozwiązań, w tym bardzo kompaktowe i eleganckie rozwiązanie Panagiotis Stathopoulos. Dla przypomnienia, wybrałem LOOKUP i rozszerzający się zakres:

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

W tym przykładzie wyjaśniono mechanikę funkcji WYSZUKAJ w przypadku tego rodzaju problemu.

Interesujące artykuły...