Формула Excel: усреднить последние 3 числовых значения -

Общая формула

(=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(data),ROW(data)),(1,2,3)),ROW(data), data)))

Резюме

Чтобы усреднить последние 3 числовых значения в диапазоне, вы можете использовать формулу массива, основанную на комбинации функций, чтобы передать последние n числовых значений в функцию СРЕДНЕЕ. В показанном примере формула в D6:

(=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(data),ROW(data)),(1,2,3)), ROW(data), data)))

где «данные» - именованный диапазон B5: B13.

Примечание: это формула массива, и ее необходимо вводить с помощью Ctrl + Shift + Enter.

Объяснение

Функция СРЗНАЧ вычисляет среднее значение чисел, представленных в массиве, поэтому почти вся работа в этой формуле заключается в создании массива из трех последних числовых значений в диапазоне. Работая изнутри, функция ЕСЛИ используется для «фильтрации» числовых значений:

IF(ISNUMBER(data),ROW(data))

Функция ISNUMBER возвращает TRUE для числовых значений и FALSE для других значений (включая пробелы), а функция ROW возвращает номера строк, поэтому результатом этой операции являются номера строк массива, которые соответствуют числовым записям:

(5;6;FALSE;8;9;10;FALSE;12;13)

Этот массив переходит в функцию НАИБОЛЬШИЙ с константой массива (1,2,3) для k. LARGE автоматически игнорирует значения FALSE и возвращает массив с 3 наибольшими числами, которые соответствуют последним 3 строкам с числовыми значениями:

(13,12,10)

Этот массив входит в функцию ПРОСМОТР в качестве значения поиска. Массив поиска предоставляется функцией ROW, а массив результатов - это именованный диапазон «data»:

LOOKUP((13,12,10), ROW(data), data))

Затем ПРОСМОТР возвращает массив, содержащий соответствующие значения в «данных», которые передаются в СРЕДНЕЕ:

=AVERAGE((100,92,90))

Обработка меньшего количества значений

Если количество числовых значений упадет ниже 3, эта формула вернет ошибку #NUM, поскольку LARGE не сможет вернуть 3 значения по запросу. Один из способов справиться с этим - заменить жестко запрограммированную константу массива (1,2,3) динамическим массивом, созданным с помощью INDIRECT, например:

ROW(INDIRECT("1:"&MIN(3,COUNT(data))))

Здесь MIN используется для установки верхнего предела массива равным 3 или фактического количества числовых значений, в зависимости от того, что меньше.

Примечание: я столкнулся с этим умным подходом на сайте chandoo.org в ответе Саяна на аналогичный вопрос.

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