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