使用不帶範圍的陣列

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 部分)該系列中的其他文章中找到