我有這個宏來檢查在列A中是否包含「F」的單元格,然後從列CC檢查最後一次使用的行(我希望我知道這是正確的,因爲只是CC列是最長的) 如果發現「F」,則右側的每個單元向下移動兩個位置。工作表具有從列的數據,直到IWExcel通過使用Variant而不是範圍的宏來提高性能
Dim rng As Range
Dim LastRow As Long
Application.ScreenUpdating = False
With ActiveSheet
LastRow = .Cells(.Rows.Count, "CC").End(xlUp).Row
End With
For Each rng In Range(Sheets(1).Range("A1"), Sheets(1).Range("A" & LastRow).End(xlUp))
If rng.Text = "F" Then
rng.Offset(-1, 0).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 0).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
...
rng.Offset(-1, 256).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(-1, 256).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next rng
Range("A1").Select
Application.ScreenUpdating = TRUE
不幸的是,大數據時,我得到了750+行這個宏是極其緩慢,處理時間,即使在一個雙Xeon處理器會長達90分鐘(雙核各的處理器)與16GB RAM機器。 我試圖做關閉屏幕更新的性能優化,所有的Excel工作表都沒有相對公式,只是應該向下移動兩行數據...
經過大量的谷歌搜索,我發現這個頁面從Office博客,我注意到,而不是抵消變體應該是多了很多在我的情況好轉:
http://blogs.office.com/2008/10/03/what-is-the-fastest-way-to-scan-a-large-range-in-excel/
我嘗試了一些變化通過聲明rng
爲Variant代替範圍,但還是一樣慢結果。
你能否告訴我應該如何更改我的代碼以使用可能的變體並實現最佳性能?
考慮陣列處理的所有數據:不與張交互操作應該讓你大幅提高性能。遵循這種方法,您應該通過將'SomeRange.Value'分配給數組,將數據從sheet傳遞到2維數組。然後處理數據,也可以創建另一個具有不同大小的數組,並將結果數組分配給「SomeRange.Value」。 – omegastripes 2015-03-13 20:06:54