2

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

Вот что у меня сейчас в формате Matrix:

ROW  |  COLUMN A  |  COLUMN B  |  COLUMN C  |  COLUMN D  |  COLUMN E
---  |  ------------------------------------------------------------
1    |  Username  |  StartMo   |  January   |  February  |  March
     |  ____________________________________________________________
2    |  User 1    |  March     |  1,000     |  1,500     |  1,000
3    |  User 2    |  April     |  2,000     |  1,000     |  1,500
4    |  User 3    |  April     |  1,000     |  1,750     |  1,000
  • Пользователи 1-10 в столбце A
  • Начать месяц в столбце B
  • Ежемесячные данные за прошедший год в столбцах CM
  • Заголовки с указанием месяца данных по строке 1

Что мне нужно сделать, так это Сумма, если в столбце А указан пользователь, которого я хочу, но только если строка 1 находится в пределах 3 месяцев с начала месяца.

Мысли? Я хотел бы опубликовать фотографию данных, но так как я новичок, это не позволит мне.

1 ответ1

2

Для каждой строки вы хотите суммировать диапазон, который является подмножеством этой строки, определенной «Начальным месяцем» в столбце 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.

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