1

Прошло много времени с тех пор, как мне нужно было использовать Excel, и мне нужна небольшая помощь с копированием формулы.

Это упрощенное объяснение того, что я пытаюсь сделать:

A1:365 имеет ежедневные цифры продаж.

В столбце BI нужно рассчитать еженедельные продажи, поэтому формула в B1 равна =SUM(A1:A7)

Если я скопирую формулу вниз, B2 изменится на =SUM(A2:A8) , но я бы хотел сказать =SUM(A8:A14)

Можно ли это сделать без необходимости повторного ввода формулы 52 раза?

2 ответа2

4

Как уже упоминалось, INDIRECT() является опцией. Другой - это OFFSET() ...

Таким образом, B1 станет

=SUM(OFFSET($A$1,(ROW()-1)*7,0,7,1))

и скопируйте, как раньше.

Немного деконструируя, OFFSET(reference, rows, cols, height, width) определяет диапазон, начинающий rows вниз и cols поперек от reference , размеры которой - строки height и столбцы width . (Последние два необязательны, если вы хотите только диапазон 1x1). ROW() без аргумента возвращает номер строки ячейки, содержащей функцию, поэтому в приведенном выше случае она возвращает 1 в B1, 2 в B2 и т.д., Поэтому мы просто вычитаем 1 и умножаем на желаемый размер (в данном случае 7) чтобы выяснить, где в списке должна начинаться наша цель для суммирования.

0

Да, это может быть сделано.

Попробуйте это здесь:

=SUM(INDIRECT(ADDRESS((CELL("row",B1)-1)*7+1,1)):INDIRECT(ADDRESS((CELL("row",B1))*7,1)))

Редактировать:

благодаря Майку Вудхаусу (см. его ответ) я могу немного упростить свое решение.

Row() (в ячейке "B1") будет делать то же, что и CELL("row",B1) поэтому

=SUM(INDIRECT(ADDRESS((ROW()-1)*7+1,1)):INDIRECT(ADDRESS(ROW()*7,1)))

сделать то же самое немного проще.

Объяснение:

Вам нужно рассчитать адреса тогда.

(CELL("row",B1)-1)*7+1 даст вам стартовую ячейку. CELL("row",B1) дает мне номер текущей строки. Вычтите 1, умножьте на 7 и сложите 1, чтобы получить для каждой строки начальную ежедневную строку в виде числа.

ADDRESS((CELL("row",B1)-1)*7+1,1) делает адресную строку из чисел, я даю вычисленный начальный номер строки и столбец (1 в конце)

INDIRECT(ADDRESS((CELL("row",B1)-1)*7+1,1)) косвенно создает диапазон из строки.

Так же, как и для последней разыскиваемой ячейки. INDIRECT(ADDRESS((CELL("row",B1))*7,1)) разница только в расчете конечной строки.

Тогда я отдаю все это Sum и я готов. Просто скопируйте его 52 раза, и вы получите сумму за каждую неделю.

Решение

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