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