Как ускорить этот макрос Excel VBA? - PullRequest
0 голосов
/ 21 июля 2011

Я немного знаю VBA, но я всегда ищу более разумные способы (как вы, люди, работаете !!).

Вот что я пытаюсь сделать.Мне приходится иметь дело с некоторыми данными, которые имеют

Год |Месяц |День |Час |Минута |Данные1 |Data2 .... |ДанныеN

каждый в отдельном столбце и имеет тысячи строк.Количество столбцов «Данные» определяется пользователем во время выполнения (не менее 1 и не более 100).Данные могут иметь любой временной шаг, например, каждую минуту, 5 минут, 10 минут, каждый час, ежедневно и так далее.Затем пользователь указывает интервал выходных данных, который всегда будет больше, чем интервал входных данных.

Итак, этот макрос должен записывать данные в интервале, указанном пользователем.Данные в каждом столбце между выходными временными шагами должны быть добавлены вместе.См. Следующие две таблицы:

Входные данные:

Yr     Mth  Day Hr  Min Data_1  Data_2

2010    2   7   8   0   1.01    2.01

2010    2   7   8   5   1.02    2.02

2010    2   7   8   10  1.03    2.03

2010    2   7   8   15  1.04    2.04

2010    2   7   8   20  1.05    2.05

2010    2   7   8   25  1.06    2.06

2010    2   7   8   30  1.07    2.07

2010    2   7   8   35  1.08    2.08

2010    2   7   8   40  1.09    2.09

2010    2   7   8   45  1.10    2.10

2010    2   7   8   50  1.11    2.11

2010    2   7   8   55  1.12    2.12

2010    2   7   9   0   1.13    2.13

2010    2   7   9   5   1.14    2.14

Выходные данные:

Yr     Mth  Day Hr  Min Data_1  Data_2

2010    2   7   8   0   1.01    2.01

2010    2   7   8   15  3.09    6.09

2010    2   7   8   30  3.18    6.18

2010    2   7   8   45  3.27    6.27

2010    2   7   9   0   3.36    6.36

Таким образом, входные данные каждые 5 минут, а выходные данные должны быть каждые15 минутКаждая строка данных между последовательными 15-минутными интервалами должна быть добавлена ​​вместе.

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

Любая помощь в ускорении этого процесса будет принята с благодарностью.

Заранее спасибо

-MP

** Код, который я использовал для записи обработанных данных в текстовый файл:

Open FName For Output Access Write As #FNum
For RowNdx = StartRow To endrow
done = Int((RowNdx / endrow) * 100)
Application.StatusBar = "Exporting *.gag file... (" & done & " % done )"
    WholeLine = ""
    For colNdx = StartCol To Endcol
        If Sheets("Output").Cells(RowNdx, colNdx).Text = "" Then
            CellValue = ""
        Else
           CellValue = Sheets("Output").Cells(RowNdx, colNdx).Text
        End If
        WholeLine = WholeLine & CellValue & sep
    Next colNdx
    WholeLine = Left(WholeLine, Len(WholeLine) - Len(sep))
    Print #FNum, WholeLine
Next RowNdx
Close #FNum

Можно ли записать диапазон в текстовый файл одновременно.Я пытаюсь избежать зацикливания.

Спасибо за вашу помощь

MPD

1 Ответ

0 голосов
/ 21 июля 2011

Вы пробовали установить

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

перед вашими циклами?

Не забудьте установить

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

после того, как ваши циклы завершены.

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

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