使用帶分隔符的字串代替動態陣列

在非常大的資料集中使用 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 中建立動態陣列的最快或最有效的方法,但它是一種可行的替代方法。