Увеличение диапазона автозаполнения по номеру переменной - PullRequest
1 голос
/ 14 июля 2011

Требование для рабочего проекта - суммировать почасовые значения вместе по дням для определенного количества категорий. Эти значения хранятся в электронной таблице в одном длинном столбце; чтобы получить значения, я суммирую каждые 24 строки в новый день. Это может быть достигнуто путем циклического перемещения по электронной таблице и увеличения значений для каждого цикла на 24.

Например:

first = 1
second = 24
i = 0
While Worksheets("Data").Range("A1").offset(i, 0) <> ""
    Worksheets("Data").Range("C1").offset(i, 0).Formula = "=SUM(B" & first & ":B" & second & ")")
    first = first + 24
    second = second + 24
Wend 

Где столбец A - это категория, а столбец B - почасовые данные. Столбец B будет иметь длину столбца A * 24.

Это дает такие результаты, как ...

=SUM(B1:B24)
=SUM(B25:B48)
=SUM(B49:B72)

.. и так далее.

Это работает хорошо, но очень медленно. То, что я хотел бы сделать, это использовать автозаполнение для всего диапазона, но я не уверен, как записать его таким образом, чтобы он увеличивал значения на 25 каждый раз. До сих пор мне удавалось только увеличить его на единицу для каждого значения, где

=SUM(B1:B24)

становится

=SUM(B2:B25)

Есть ли способ использовать автозаполнение в диапазоне, где оно будет увеличиваться на переменное число - в данном случае 24?

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Если ваша единственная жалоба при текущем подходе - это скорость, то вы, вероятно, можете сделать это значительно быстрее, приостановив вычисления, вставив формулу:

Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic
0 голосов
/ 15 июля 2011

Может быть много способов сделать это, используя или не используя VBA.

Я представляю вам решение, использующее только Excel, но его можно перенести на VBA, чтобы избежать использования других столбцов (я считаю, что должен быть способ сделать это без использования столбцов поддержки, кто-то еще в сообществе может вспомнить, как, в конце концов, ).

Хорошо, уловка в том, чтобы использовать формулу INDIRECT.

Я предполагаю, что вы применяете формулу суммы в столбце C.

В столбцах D и E вы будете хранить индексы строк. Тогда у нас будет:

|D      |E      |
|-------|-------|
|1      |24     |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |

Теперь в столбце C вместо суммы с прямыми значениями используйте:

=SUM(INDIRECT("B"&D1):INDIRECT("B"&E1))
=SUM(INDIRECT("B"&D2):INDIRECT("B"&E2))
=SUM(INDIRECT("B"&D3):INDIRECT("B"&E3))

Этот код можно перетаскивать столько раз, сколько вы хотите, если вы перетаскиваете столбцы C, D и E. вместе.

Опять же, это также может быть сделано более изощренным способом с использованием VBA (и, возможно, более разумным способом, используя только Excel, хе-хе), но мне так пришло в голову. В любом случае, большинство вопросов, которые я видел здесь о простых реализациях VBA, были для личного использования, поэтому использование других столбцов не составило бы проблем.

Если вы предпочитаете (или вам нужно) использовать VBA, набросайте свой код, и мы вам поможем.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...