[英]Excel VBA Arrays good practices: create a huge blank array at once or use redim preserve all the time?
我喜歡使用一個數組,好像它是一個“在RAM內存”的電子表格,所以代碼更干凈,運行速度更快。
所以我想問一下:一般來說,最好是用一個巨大的數組啟動代碼,比如說Dim arr(10000)
,所以我可以使用它,好像它是一張空白頁我必要時填寫,或者是一個壞的練習,相反,我應該一直使用Redim Preserve
將數據插入到數組中?
在此先感謝您的幫助。
您的問題的答案取決於您打算如何填充數組(注意這是在Excel的上下文中)。 這里有四個簡單的場景:
從范圍填充。 簡單地Dim
一個變量,讓VBA做的所有工作。
Dim myArray as Variant
Dim myRange as Range
'Set myRange = something
myArray = myRange.Value '<-- Fills a 2-D array
For rowIterator = LBound(myArray,1) to UBound(myArray,1) '<- How identify the size of the first dimension
For colIterator = LBound(myArray,2) to UBound(myArray,2) '<- How identify the size of the second dimension
'Do something to myArray(rowIterator, colIterator)
Next colIterator
Next rowIterator
定義邊界時填寫。 在某些代碼中,您可以在代碼中盡早學習運行您的界限。 在這種情況下,您可以在進入循環之前進行ReDim
。
Dim myArray() As String
Dim someCounter As Long
'Some early code
someCounter = CLng(myRange.Value)
ReDim myArray(someCounter) '<-- Do this only once.
For iterator = LBound(myArray) to UBound(myArray)
' Do Something to myArray(iterator)
Next iterator
填充循環。 當ReDim
使用數組時,尤其是使用ReDim Preserve
計算成本很高時,請避免使用此功能。 但是,如果您知道它是一個小循環,您可能希望接受成本。
在循環中調整大小的另一種方法是使用Collection
。
超大開始。 您可以超大陣列,而不是不斷地重新調整陣列的大小,但是您可能需要額外的管理開銷來嘗試管理未使用的陣列插槽。 你怎么知道“”或0數組中的值是真的是“”還是0而不是默認的空值?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.