excel-vba 使用带定界符的字符串代替动态数组

示例

在非常大的数据集上,在VBA中使用动态数组可能很麻烦且耗时。当在动态数组中存储简单数据类型(字符串,数字,布尔值等)时,可以ReDim Preserve通过将Split()函数与一些巧妙的字符串过程配合使用来避免在VBA中使用动态数组所需的语句。例如,我们将看一个循环,该循环根据某些条件将范围内的一系列值添加到字符串中,然后使用该字符串填充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中创建动态数组的最快或最有效的方法,但它是可行的选择。