Я пытаюсь использовать на листе формулу AVERAGEIF для расчета скользящей средней на основе текущего месяца. У меня есть эти данные:

         A            B      C      D      E      F         G      H       I      J      K      L      M     N
      1 2017         Jan    Feb    Mar    Apr    May       Jun    Jul     Aug    Sep    Oct    Nov    Dec   Ave
      2 Cost/Req.    $430  $432     $365   $391  $1250        $-     $-      $-      $-      $-      $-      $-    ??

и я хотел бы ввести в N2 среднее значение января-апреля сегодня (май) и в июне за январь-май и так далее. Я пытался использовать функцию COLUMN (), но она не работает.

AVERAGEIF(B2:M2,"COLUMN()<MONTH(NOW()")

Любая идея?

Спасибо!

3 ответа3

2

Давайте рассмотрим несколько аспектов этого вопроса отдельно:

ТЛ; др

=AVERAGE(INDIRECT("A2:"&ADDRESS(2,MONTH(NOW())-1)))

Почему ваша формула не работает?

Функция AVERAGEIF принимает аргументы критериев, но они, похоже, не способны делать что-либо очень сложное. Я не смог найти истинного объяснения их синтаксиса, но примеры в онлайн-документации не делают ничего более глубокого, чем ">32" , и вы пытаетесь использовать целые формулы. Я не видел никаких доказательств того, что этот подход будет работать даже в теории. (Я бы с радостью показал, что это неправильно!) AVERAGEIF (или AVERAGEIFS) не та функция, которую вы хотите.

Усреднение диапазона

Усреднить диапазон значений легко. Вы явно уже знаете, как это сделать, чтобы даже задавать вопрос, который вы есть! Предполагая значения в A2:L2 (верхние колонтитулы месяца):

=AVERAGE(A2:L2)

Но подождите, вы только хотели усреднить до и не включая текущий месяц. Так что нам нужен способ расчета диапазона, который входит в базовую формулу среднего. В мае это A2:D2 . Как мы можем рассчитать это?

Формула для расчета диапазона

Итак, новая проблема заключается в том, как получить диапазон (ссылку на функцию AVERAGE ) из текущего месяца. Функции Lookup & Reference помогут вам здесь. Возможно, есть более простой способ сделать это, но лучшее, что я мог придумать, это использовать INDIRECT для возврата ссылки / диапазона, если мы дадим ему соответствующий текст, что является более легкой проблемой. Теперь все, что нам нужно, это придумать текст «A2:D2» (на май). А2 достаточно прост: должен быть постоянным. Может быть способ конвертировать 4 (для апреля, последнего месяца, который вы хотите) в D (нужный вам столбец), но вы также можете использовать функцию ADDRESS для вычисления D2 по номерам строк / столбцов. Обратите внимание, что он думает "назад" от нормального. Таким образом, A2 будет введен как ADDRESS(2,1) . А в вашем случае вы знаете строку 2 и можете рассчитать нужный вам столбец, используя нужную функцию MONTH , а затем вычесть 1, чтобы вернуться к прошлому месяцу. Таким образом, мы можем получить 'D2' с помощью ADDRESS(2,MONTH(NOW())-1) . Тогда это просто вопрос, чтобы собрать это вместе. Объединение A2 и D2 сделано с амперсандом.

="A2:"&(ADDRESS(2,MONTH(NOW())-1))

Собираем все вместе

Теперь у нас есть текстовое представление области, которую мы хотим усреднить. Функция INDIRECT преобразует его в реальный диапазон, который может использовать функция AVERAGE . Последняя функция затем усредняет все это вместе:

=AVERAGE(INDIRECT("A2:"&ADDRESS(2,MONTH(NOW())-1)))

Некоторые заметки

Если ваш правильный диапазон действительно U192:AF192, замените 2 в формуле на 192 и добавьте 20 к параметру строки (так как U - 20 строк справа от A).

Я также прилагаю скриншот того, как рассчитываются различные промежуточные шаги. Окончательная формула - та, что в строке 8. Я также сделал следующий шаг - усреднил только последние несколько месяцев, а не весь год, используя ту же идею в строке 12.

Обратите внимание, что весь этот подход будет зависеть от того, когда открывается электронная таблица. Если вы откроете его в следующем феврале, в среднем он будет составлять только два месяца, а не весь 2017 год. Январь задохнется полностью. Возможно, вы захотите придумать более разумную формулу для обработки параметра месяца.

0

Этот вопрос трудно понять.  Что я понимаю

Сегодня (в мае) я бы хотел узнать среднее значение января-апреля. В июне я хотел бы узнать среднее значение за январь-май и так далее.

Это легко обрабатывается как среднее значение диапазона с одним фиксированным (закрепленным) концом и одним плавающим концом.  В ячейке V193 (т. Feb столбце за февраль под значением «Стоимость / требование» (432 долл. США)) введите

=AVERAGE($U192:U192)

При оценке в V193 это эквивалентно AVERAGE(U192:U192) , что эквивалентно AVERAGE(U192) , что эквивалентно U192 , что является январским значением 430 долларов США.  Но теперь я хочу, чтобы вы перетаскивали / заливали это вправо, в колонку AF . В W193 это будет изменено на =AVERAGE($U192:V192) , потому что $U192 (первый аргумент для AVERAGE) привязан к столбцу U , но U192 (второй аргумент для AVERAGE) переходит в один столбец для слева от текущего столбца.  И так далее, вплоть до AF193 , который содержит =AVERAGE($U192:AE192) . таблица

0

Самый простой способ сделать это - создать формулу AVERAGE в операторе IF которая проверяет, имеет ли месяц ввод значений. Поместите эту формулу в U3 , затем перетащите ее через ряд к AF3 .

=IF(ISBLANK(U2), "", AVERAGE($U$2:U2))

Эта формула проверит, заполнена ли ячейка. Если TRUE , он запустит функцию. Функция усреднения имеет абсолютную ссылку, которая привязывает первый столбец.

Когда вы добавляете суммы к месяцам в row 2 , формула обновит скользящее среднее, чтобы включить новые данные. Результаты будут в среднем с января по месяц.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .