如何加快此Excel VBA宏?

时间:2011-07-21 15:26:14

标签: excel-vba vba excel

我知道一点VBA,但我一直在寻找更聪明的方式(人们的工作方式!!)。

这是我想要做的。我必须处理一些

的数据

年|月|一天|小时|分钟| Data1 |数据2 .... | DataN

每个都在一个单独的列中,并且有数千行。 “数据”列的数量由用户在运行时定义(至少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 :(得分:0)

您是否尝试过设置

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
在你的循环之前

请记住设置

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
循环完成后

您也可以将所有数据保存到循环中的数组中,然后将整个数组作为范围写入输出电子表格,而不是逐个单元格地写入值,这就像你看来的那样现在做