Применение функций, таких как MEDIAN, к отдельным элементам в формуле массива - Excel - PullRequest
0 голосов
/ 20 октября 2018

Я использую функцию MEDIAN для вычисления перекрытия двух диапазонов дат.Формула выглядит примерно так:

=MEDIAN(A18,C18+1,$C$8+1)-MEDIAN(A18,C18+1,$B$8)

A18 & C18 - диапазон дат 1

B8 & C8 - диапазон дат 2

Iхотел бы превратить это в формулу массива, подобную этой, чтобы суммировать результаты для нескольких строк

{=SUM(MEDIAN(A18:A24,C18:C24+1,$C$8+1)-MEDIAN(A18:24,C18:24+1,$B$8))}

Это работает, только если MEDIAN применяется отдельно для каждого элемента в массивах A18:A24 & C18:C24.

В настоящее время Excel объединяет массивы, содержащиеся в каждом вызове MEDIAN, и возвращает общую медиану, оставляя только одно значение для SUM для суммирования.И это «неправильный» результат для того, что мне нужно сделать.

Есть ли способ заставить Excel применять MEDIAN для каждого элемента в моих массивах?Т.е. есть способ заставить Excel возвращать массив из функции MEDIAN.

Если это возможно, это позволяет мне избежать массива из 120 000 элементов или книги с поддержкой макросов.

1 Ответ

0 голосов
/ 20 октября 2018

Cool MEDIAN формула.Но вы не можете использовать MEDIAN по своему усмотрению с формулой массива, поскольку MEDIAN всегда возвращает одиночный результат (не массив).

У меня есть решение вашей проблемы, но это несколько вяло / повторяющееся:

(я включил комментарии справа от формулы, чтобы объяснить, что происходит)

= IF(C18:C24>C8,     // (For each cell in C18:C24) If the value is greater than C8
     C8,             // Then C8 is the upper bound
     C18:C24)        // Else, the specific value from C18:C24 is the upper bound
  -                  // (minus sign)
  IF(A18:A24<B8,     // (For each cell in A18:A24) If the value is less than B8
     B8,             // Then B8 is the lower bound
     A18:A24)        // Else, the specific value from A18:A24 is the lower bound

Это возвращает массив перекрытий диапазонов дат, за исключением , что возможно, что эти результаты будут возвращать отрицательные числа (если перекрытие не происходит), но в этом случае вы хотите вернуть 0.

Обойти это можно с помощью другого оператора IF.

= IF(formula < 0, 0, formula)

Где formula - первая формула, приведенная мной выше.

Примечание: Обычно в этой ситуации вы могли бы избежать ввода formula дважды с помощью чего-то вроде этого:

= MAX(formula,0)

За исключением того, что это не сработает, когда formula сам возвращает массив, так как MAX возвращает только один результат.Это аналогичная проблема, с которой вы сталкиваетесь, прежде всего, с MEDIAN.

В общем, без комментариев, это формула для суммирования значений:

= SUM(IF((IF(C18:C24>C8,C8,C18:C24)-IF(A18:A24<B8,B8,A18:A24))<0,0,
          IF(C18:C24>C8,C8,C18:C24)-IF(A18:A24<B8,B8,A18:A24)))

Конечно, это формула массива, должна быть введена с помощью Ctrl + Shift + Введите вместо просто Введите .

...