使用不带范围的数组

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