Формула вызова - отличие от последней записи - Головоломка

Содержание

Контекст

Пару недель назад у меня был интересный вопрос от читателя об отслеживании увеличения или уменьшения веса в простой таблице.

Идея состоит в том, чтобы каждый день вводить новый вес и рассчитывать разницу с предыдущим днем. Когда каждый день есть запись, формула проста:

Разницу можно рассчитать с помощью такой формулы, ввести в D6 и скопировать в таблицу:

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

Однако, когда один или несколько дней пропускаются, дела идут наперекосяк, и расчетный результат не имеет смысла:

Нет, вы не набрали 157 фунтов за день

Проблема в том, что формула использует пустую ячейку в вычислении, которое оценивается как ноль. Нам нужен способ найти и использовать последний вес, записанный в столбце C.

Соревнование

По какой формуле рассчитывается разница с последней записью, даже если дни были пропущены?

Желаемый результат - разница с использованием последней предыдущей записи

Предположения

  1. Одна формула вводится в D6 и копируется (т.е. одна и та же формула во всех ячейках)
  2. Формула должна обрабатывать одну или несколько предыдущих пустых записей.
  3. Удаление пустых записей (строк) не допускается
  4. Вспомогательные столбцы не допускаются

Примечание: один из очевидных способов - использовать формулу вложенного ЕСЛИ. Я бы не одобрил этого, поскольку он не будет хорошо масштабироваться для обработки неизвестного количества последовательных пустых записей.

Есть решение? Оставьте комментарий к предложенной вами формуле ниже.

Я сам собрал формулу, и я поделюсь своим решением после того, как дам умным читателям некоторое время, чтобы они отправили свои формулы.

Дополнительный кредит

Ищете более сложные задачи? Вот тот же результат с применением специального числового формата. Какой формат числа? Подсказка: я взял это у Майка Александра в его блоге Bacon Bits.

Ответ (нажмите, чтобы развернуть)

Ниже представлены действительно хорошие решения, в том числе очень компактное и элегантное решение Панайотиса Статопулоса. Для записи я выбрал ПРОСМОТР и расширяющийся диапазон:

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

Механика LOOKUP для такого рода проблем объясняется в этом примере.

Интересные статьи...