使用带分隔符的字符串代替动态数组

在非常大的数据集中使用 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 中创建动态数组的最快或最有效的方法,但它是一种可行的替代方法。