簡體   English   中英

Excel VBA Arrays良好實踐:一次創建一個巨大的空白數組或一直使用redim保留?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM