Как суммировать последние 3 месяца, просматривая список в Excel?

#excel #vba

#excel #vba

Вопрос:

У меня есть список значений для каждого месяца от 1 до 12 в Excel. Когда квартал заканчивается в декабре, он должен суммировать значения за квартал Октябрь, ноябрь и декабрь, т.Е. Месяц 10, 11 и 12. Текущая используемая функция — это функция смещения =SUM(OFFSET(INDEX($F$999:$F$1008,MATCH(MONTH($B1013),$E$999:$E$1008)),0,0,-3,1)) .Формула хорошо работает, когда начальная позиция — март, июнь, сентябрь и декабрь. Однако предположим, что месяц окончания квартала — январь. Затем с помощью приведенной выше функции будут суммироваться только значения за январь, потому что выше этого нет значений за 2 месяца до этого.

Желаемый результат: если квартал заканчивается в январе, тогда он должен проходить по списку и суммировать ноябрь, декабрь и январь. Цель состоит в том, чтобы выполнить анализ чувствительности, потому что месяцем, заканчивающимся на квартал, может быть любой месяц, и на основе месяца, заканчивающегося на квартал, он суммирует все значения за квартал.

Список приведен ниже, поэтому, если квартал заканчивается в феврале, он должен суммировать (декабрь) 10% (январь) 3% (февраль) 6% = 19%

 Jan 1   3%
Feb 2   6%
Mar 3   2%
Apr 4   9%
May 5   5%
Jun 6   8%
Jul 7   3.2%
Aug 8   12%
Sep 9   6.5%
Oct 10  5.6%
Nov 11  8%
Dec 12  10% 
 

Комментарии:

1. какая версия Excel?

Ответ №1:

Хитрость заключается в том, чтобы сгенерировать числовую последовательность, которая будет соответствовать требуемым месяцам.

Обратите внимание, что в вашей таблице номер месяца = индексу в таблице.

Формула, которая сгенерирует требуемую последовательность, такую, что если у вас месяцем, заканчивающимся кварталом, является январь (например, месяц номер 1) => {11,12,1} равно

   Office 365:  =SUM(INDEX(monthly,MOD(SEQUENCE(3, ,F2 12-2)-1,12) 1,3))
  
  older versions:  =MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3)) F2 12-4,12) 1
 

где F2 содержит номер месяца заканчивающегося квартала.

Так что для O365:

 =SUM(INDEX(monthly,MOD(SEQUENCE(3, ,F2 12-2)-1,12) 1,3))

  or      :  =SUM(XLOOKUP(MOD(SEQUENCE(3, ,F2 12-2)-1,12) 1,monthly[monthNum],monthly[perCent]))
 

где monthly имя вашей таблицы

введите описание изображения здесь

Для более ранних версий попробуйте:

 =SUM(INDEX(monthly,MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3)) F2 12-4,12) 1,3))
 

или даже:

 =SUM(INDEX(monthly,N(IF(1,MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3)) F2 12-4,12))) 1,3))
 

В некоторых более ранних версиях Excel вам может потребоваться «подтвердить» эту формулу массива, удерживая нажатой клавишу ctrl shiftпри нажатии enter. Если вы сделаете это правильно, Excel заключит формулу в фигурные {...} скобки, как указано в строке формул