Я предполагаю, что результат должен быть напечатан в одну ячейку без использования каких-либо других ячеек для печати промежуточных результатов. Это, вероятно, работает только с формулами массива, кодом VBA или запросами к базе данных (ответ vembutech).
Массив Формул
См. Рекомендации и примеры формул массива и Создать формулу массива для деталей.
Одно решение
В моем примере значения для усреднения находятся в ячейках сетки от А1 до А11.
Эта формула решает проблему:
=AVERAGE(IF((A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0),"",A1:A11))
после его вставки вам нужно набрать CTRL+SHIFT+ENTER (не просто ENTER, см. Создание формулы массива).
Идея этого решения
Функция AVERAGE
(AVERAGEA
) вычисляет среднее значение всех ячеек, содержащих число. Ячейки, содержащие строку или логическое / логическое, игнорируются. Что мы будем делать: установить эти ячейки в «» (пустая строка), которые равны 0, равны минимальному значению ячейки (0 исключено) или равны максимальному значению ячейки. В основном мы используем эту формулу:
=AVERAGE(IF(_TODO_,"",A1:A11))
Теперь нам нужно заменить TODO на какой-то контент (три описанные ситуации). Эти три ситуации проверены:
A1:A11=MAX(A1:A11)
A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11))
A1:A11=0
Второй тест немного сложен: мы хотим исключить «0» (ноль) из расчета минимального значения. Функция MIN
игнорирует все нечисловые значения (например, пустую строку ""). IF($A$1:$A$11=0,"",$A$1:$A$11)
устанавливает все ячейки в "", которые равны нулю. Все остальные ячейки сохраняют свои исходные значения.
Теперь мы объединяем три теста. Это делается путем помещения скобок вокруг трех тестов и объединения их знаком +
, который представляет логическое OR
.
(A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0)
Этот комбинированный тест теперь заполняется в нашей формуле вверху, заменяя _TODO_
:
=AVERAGE(IF((A1:A11=MAX(A1:A11))+(A1:A11=MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))+(A1:A11=0),"",A1:A11))
Другое решение
На основе подхода пользователя 3396592 можно также написать:
=AVERAGEIFS(A1:A11,A1:A11,"<>0",A1:A11,"<>"&MAX(A1:A11), A1:A11,"<>"&MIN(IF($A$1:$A$11=0,"",$A$1:$A$11)))