【发布时间】:2014-07-15 16:15:50
【问题描述】:
我正在尝试找到在 VBA 中执行任务的最快方法。目前我把它写成一个嵌套的 for 循环,它可能非常慢。我正在遍历一个唯一数字列表并将它们与不同列表中的数字相匹配。如果我得到一个匹配,我将信息存储在一个多维数组中,因为可能有多个匹配,我想跟踪所有这些。不幸的是,这意味着当使用 for 循环时,如果只有 1000 个唯一数字和 5000 个要查找匹配的数字,我的循环最终可能会迭代 1000*5000 = 5000000 次。如您所见,这会很快产生问题。我在问是否有更好的方法来解决这个问题而留在 VBA 中。我已经完成了所有技巧,例如将 screenUpdating 设置为 false 并将计算设置为 manaul。
这是我的代码:
For x = 0 To UBound(arrUniqueNumbers)
Dim arrInfo() As Variant
ReDim Preserve arrInfo(0)
If UBound(arrInfo) = 0 Then
arrInfo(0) = CStr(arrUniqueNumbers(x))
End If
For y = 2 To Length
UniqueString = CStr(arrUniquePhoneNumbers(x))
CLEARString = CStr(Sheets(2).Range("E" & y).Value)
If UniqueString = CLEARString Then 'match!
NormalizedDate = Format(CStr(Sheets(2).Range("G" & y).Value), "yyyymmdd")
z = z + 1
ReDim Preserve arrInfo(z)
arrInfo(z) = NormalizedDate & " " & LTrim(CStr(Sheets(2).Range("D" & y).Value))
arrInfo(z) = LTrim(arrInfo(z))
End If
Next
arrUniqueNumbers(x) = arrInfo()
ReDim arrInfo(0) 'erase everything in arrOwners
z = 0
Next
【问题讨论】:
-
也许使用
Scripting.Dictionary更快,因为您可能会在代码的Redim Preserve部分花费大量时间。 -
另外,可能想看看 Collection 对象。
标签: arrays performance vba excel