使用不帶範圍的陣列
Office 部落格 - Excel VBA 效能編碼最佳實踐
通常,通過儘可能避免使用 Range
來實現最佳效能。在這個例子中,我們將整個 Range
物件讀入一個陣列,對陣列中的每個數字進行平方,然後將陣列返回到 Range
。這隻能訪問 Range
兩次,而一個迴圈可以訪問它 20 次以進行讀/寫。
Option Explicit
Sub WorkWithArrayExample()
Dim DataRange As Variant
Dim Irow As Long
Dim Icol As Integer
DataRange = ActiveSheet.Range("A1:A10").Value ' read all the values at once from the Excel grid, put into an array
For Irow = LBound(DataRange,1) To UBound(DataRange, 1) ' Get the number of rows.
For Icol = LBound(DataRange,2) To UBound(DataRange, 2) ' Get the number of columns.
DataRange(Irow, Icol) = DataRange(Irow, Icol) * DataRange(Irow, Icol) ' cell.value^2
Next Icol
Next Irow
ActiveSheet.Range("A1:A10").Value = DataRange ' writes all the results back to the range at once
End Sub
有關定時示例的更多提示和資訊可以在 Charles Williams 的編寫高效 VBA UDF(第 1 部分) 和該系列中的其他文章中找到 。