我知道一點VBA,但我一直在尋找更聰明的方式(人們工作的方式!!)。如何加速這個Excel VBA宏?
這是我正在做的。我必須處理一些數據,這些數據有:
年份|月| Day |小時|分鐘| Data1 | Data2 .... | 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
嗨,PaulR,謝謝你的迴應。我屏幕更新關閉,但我沒有嘗試 Application.Calculation = xlCalculationManual 我會試試看。是的,現在我在寫單元格到單元格。我想將所有數據存儲到數組並寫入最後,但問題是我不知道有多少數據列會在運行時出現,因此我不知道要啓動多少個數組。任何想法? – MPD
如果數據按列排列,可以使用Worksheets(「YourWorksheetName」),UsedRange.Columns.Count獲取列數,然後將數組大小設置爲該長度。它也適用於行,只需使用Worksheets(「YourWorksheetName」)。UsedRange.Rows.Count。 –
謝謝PaulR。我結束了使用範圍,而不是循環通過每個單元格。這加快了這個過程。使用我的舊代碼處理數據大約需要4分鐘,現在大約需要40秒。我需要將處理後的數據導出到文本文件,並且佔用時間很短。有沒有辦法將範圍直接導出到文本文件(而不是每行)?我試圖在這裏發佈我的代碼,但它嚴重格式化代碼。所以,我已經在我的原始文章的末尾插入了我用來寫入文本文件的代碼。 感謝您的幫助 – MPD