Для каждой строки вы хотите суммировать диапазон, который является подмножеством этой строки, определенной «Начальным месяцем» в столбце B. Давайте начнем с того, что возьмем ваше текстовое описание диапазона и выразим его формально.
Для этого нам нужно преобразовать названия месяцев в числа от 1 до 12.
Я не знаю способа сделать это напрямую, но легко извлечь номер месяца из даты, и мы можем превратить название месяца в дату, добавив число (день месяца).
Например,
- если
B2 March , то
B2 & "1" - 1 March1 , и
MONTH(B2 & "1") равен 3 .
- Если это не работает в вашей версии Excel, попробуйте
MONTH(DATEVALUE(B2 & "1")) .
Хорошо, вопрос просит суммировать месяцы с месяца № 3 по месяц №+3.
Например, для пользователя 2 (строка 3), где B3 - «апрель» (т. Е. 4), мы хотим получить сумму с января (1) по июль (7), поскольку 4−3 = 1 и 4+3 = 7 ,
Но есть одна загвоздка: не все необходимые семь месяцев гарантированно присутствуют на листе.
Для пользователя 1 (строка 2) B2 означает «март», поэтому мы хотим, чтобы с декабря (предыдущего года) по июнь.
Данные за предыдущий и следующий год недоступны, поэтому мы сокращаем наш диапазон с января по июнь.
Мы делаем это, заставляя начальный месяц быть не менее 1, а конечный месяц - не более 12.
Если мы сделаем это с помощью одной монолитной формулы, это будет практически нечитаемо.
Гораздо понятнее использовать «вспомогательные столбцы» для хранения промежуточных значений.
Итак, установите
P2 - номер месяца, соответствующий B2:
=MONTH(B2 & "1")
Q2 - начальный месяц диапазона:
=MAX(P2-3, 1)
R2 - конец месяца диапазона:
=MIN(P2+3, 12)
Выделение ячеек, которые мы выбрали, является хитрым трюком и может помочь нам убедиться в том, что мы делаем то, что хотим.
Установка условного формата с помощью формулы
=AND((COLUMN())-2>=$Q2, (COLUMN()-2)<=$R2)
на нашей матрице данных мы получаем это:
(Изображение является ссылкой на увеличенную копию самого себя.)
Хорошим инструментом для генерации динамических диапазонов в Excel является функция OFFSET :
OFFSET(reference, rows, cols, [height], [width])
который идентифицирует прямоугольную область ячеек (возможно, одну ячейку; т.е. прямоугольник 1 × 1; возможно, больше) по ее положению относительно некоторой другой ячейки.
Например, OFFSET(B2, 0, 1, , 6) определяет диапазон C2:H2 , потому что
- Из ячейки
B2 , спустившись на 0 строк и 1 столбец справа, вы попадете в C2 ,
- Высота по умолчанию равна 1, поэтому диапазон целиком находится в строке 2, и
- Ширина 6:
C2 , D2 , E2 , F2 , G2 и H2 , или C2:H2 для краткости, составляет шесть столбцов.
Ну, ширина диапазона - это просто номер конечного столбца минус номер начального столбца плюс 1.
Таким образом, результат, который вы хотите, это просто
=SUM(OFFSET(B2, 0, Q2, , R2-Q2+1))
И мы можем поместить это в столбец O:

Вот выше в текстовой форме, так что вы можете скопировать и вставить его:
Username StartMo January February March April May June July August September October November December The Answer
Andy March 102 202 402 1002 2002 4002 10002 20002 40002 100002 200002 400002 =SUM(OFFSET(B2,0,Q2,,R2-Q2+1)) =MONTH(B2&"1") =MAX(P2-3,1) =MIN(P2+3,12)
Bob April 103 203 403 1003 2003 4003 10003 20003 40003 100003 200003 400003 =SUM(OFFSET(B3,0,Q3,,R3-Q3+1)) =MONTH(B3&"1") =MAX(P3-3,1) =MIN(P3+3,12)
Charlie April 104 204 404 1004 2004 4004 10004 20004 40004 100004 200004 400004 =SUM(OFFSET(B4,0,Q4,,R4-Q4+1)) =MONTH(B4&"1") =MAX(P4-3,1) =MIN(P4+3,12)
Возможно, вам придется вставить его в Word в виде текста, а затем скопировать его и вставить в Excel.