如何加速此Excel VBA宏?

如何加速此Excel VBA宏?,excel,vba,Excel,Vba,我知道一点VBA,但我一直在寻找更聪明的方法(你们工作的方式!!) 这就是我要做的。我必须处理一些已经 年|月|日|小时|分钟|数据1 |数据2达坦 每一个都在一个单独的列中,并且有数千行。“数据”列的数量由用户在运行时定义(至少1列,最多100列)。数据可以有任何时间步长,例如每分钟、5分钟、10分钟、每小时、每天等。然后,用户指定输出数据间隔,该间隔将始终大于输入数据间隔 因此,这个宏应该在用户指定的时间间隔内写入数据。必须将输出时间步长之间的每列中的数据添加到一起。见以下两个表: 输入:

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

这就是我要做的。我必须处理一些已经

年|月|日|小时|分钟|数据1 |数据2达坦

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

我使用两个循环,水平和垂直地遍历,并在每一步将值写入电子表格,这样就可以工作了。但是它真的很慢

我们将非常感谢为加快这一进程提供的任何帮助

提前谢谢

-议员

**我用于将处理后的数据写入文本文件的代码:

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

您尝试过设置吗

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

别忘了设定

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


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

嗨,保罗,谢谢你的回复。我关闭了屏幕更新功能,但我还没有尝试应用程序。Calculation=xlCalculationManual我将尝试一下。是的,现在我正在一间一间地写。我曾想过将所有数据存储到数组中,并在最后写入,但问题是在运行时之前我不知道有多少数据列,所以我不知道要启动多少个数组。有什么想法吗?如果数据是按列排列的,您可以通过工作表(“您的工作表名称”)获得列计数。使用drange.Columns.count,然后将数组大小设置为该长度。行也一样,只需使用工作表(“YourWorksheetName”)。UsedRange.rows.Count.谢谢PaulR。我最终使用了范围,而不是在每个单元格中循环。这大大加快了这个过程。使用我的旧代码处理数据大约需要4分钟,现在大约需要40秒。我需要将处理后的数据导出到一个文本文件,这需要最长的时间。有没有办法直接将范围导出到文本文件(而不是写入每一行)?我试图在这里发布我的代码,但它的格式不好的代码。因此,我在我的原始文章末尾插入了我一直用来写入文本文件的代码。感谢您的帮助如果要将某个范围以不同格式保存到文件中,可以将该范围复制到“临时”工作表中,然后将该“临时”工作表另存为文本文件。请参见此处:、此处:和此处,以获取有关如何执行此操作的提示。希望有帮助!保罗,谢谢你这么快的回复!事实上我试过这么做。但问题是,当我将工作表保存到.txt文件时,我的工作簿名称更改为*.txt。我可以在最后将工作簿重新保存为*.xls,但如果要替换现有文件,它会提示我。我想知道是否有办法-防止我的工作簿重命名为*.txt,只将草稿纸导出为*.txt,或者-在将书本保存回*.xls时禁用“替换现有文件”提示