使用帶分隔符的字串代替動態陣列
在非常大的資料集中使用 VBA 中的動態陣列可能非常笨重且耗時。當在動態陣列(字串,數字,布林等)中儲存簡單資料型別時,可以通過使用 Split()
函式和一些聰明的字串過程來避免 VBA 中動態陣列所需的 ReDim Preserve
語句。例如,我們將檢視一個迴圈,它根據某些條件將一系列值從一個範圍新增到一個字串,然後使用該字串填充 ListBox 的值。
Private Sub UserForm_Initialize()
Dim Count As Long, DataString As String, Delimiter As String
For Count = 1 To ActiveSheet.UsedRows.Count
If ActiveSheet.Range("A" & Count).Value <> "Your Condition" Then
RowString = RowString & Delimiter & ActiveSheet.Range("A" & Count).Value
Delimiter = "><" 'By setting the delimiter here in the loop, you prevent an extra occurance of the delimiter within the string
End If
Next Count
ListBox1.List = Split(DataString, Delimiter)
End Sub
Delimiter
字串本身可以設定為任何值,但選擇一個不會在集合中自然出現的值是謹慎的。比如說,你正在處理一列日期。在這種情況下,使用 .
,-
或/
作為分隔符是不明智的,因為日期可以格式化為使用其中任何一個,生成比你預期更多的資料點。
注意: 使用此方法存在一些限制(即字串的最大長度),因此在資料集非常大的情況下應謹慎使用。這不一定是在 VBA 中建立動態陣列的最快或最有效的方法,但它是一種可行的替代方法。