![](https://cdn.wiki-base.com/7039766/formula_challenge_-_difference_from_last_entry_puzzle.png.webp)
Контекст
Пару недель назад у меня был интересный вопрос от читателя об отслеживании увеличения или уменьшения веса в простой таблице.
Идея состоит в том, чтобы каждый день вводить новый вес и рассчитывать разницу с предыдущим днем. Когда каждый день есть запись, формула проста:
Разницу можно рассчитать с помощью такой формулы, ввести в D6 и скопировать в таблицу:
=IF(C6"",C6-C5,"")
Однако, когда один или несколько дней пропускаются, дела идут наперекосяк, и расчетный результат не имеет смысла:
Нет, вы не набрали 157 фунтов за день
Проблема в том, что формула использует пустую ячейку в вычислении, которое оценивается как ноль. Нам нужен способ найти и использовать последний вес, записанный в столбце C.
Соревнование
По какой формуле рассчитывается разница с последней записью, даже если дни были пропущены?
Желаемый результат - разница с использованием последней предыдущей записи
Предположения
- Одна формула вводится в D6 и копируется (т.е. одна и та же формула во всех ячейках)
- Формула должна обрабатывать одну или несколько предыдущих пустых записей.
- Удаление пустых записей (строк) не допускается
- Вспомогательные столбцы не допускаются
Примечание: один из очевидных способов - использовать формулу вложенного ЕСЛИ. Я бы не одобрил этого, поскольку он не будет хорошо масштабироваться для обработки неизвестного количества последовательных пустых записей.
Есть решение? Оставьте комментарий к предложенной вами формуле ниже.
Я сам собрал формулу, и я поделюсь своим решением после того, как дам умным читателям некоторое время, чтобы они отправили свои формулы.
Дополнительный кредит
Ищете более сложные задачи? Вот тот же результат с применением специального числового формата. Какой формат числа? Подсказка: я взял это у Майка Александра в его блоге Bacon Bits.
Ниже представлены действительно хорошие решения, в том числе очень компактное и элегантное решение Панайотиса Статопулоса. Для записи я выбрал ПРОСМОТР и расширяющийся диапазон:
=IF(C6"",C6-LOOKUP(2,1/($C$5:C5""),$C$5:C5),"")
Механика LOOKUP для такого рода проблем объясняется в этом примере.