我已经成功地编写了以下代码,但它必须在两个每个包含130k+行的数组上运行。目前完整数据集的运行时间约为24分钟,并且在某个时刻添加了一个计数器后,它循环了98亿次。
我阅读了关于使用Match、Vlookup等的文章,它们都建议使用迭代循环(如我所用)是最快的方法,但是我无法理解如何使其他方法与动态数组一起工作,从而适当地测试。
是否有人能告诉我是否有更快的完成此操作的方法,并在必要时演示如何实现?
我阅读了关于使用Match、Vlookup等的文章,它们都建议使用迭代循环(如我所用)是最快的方法,但是我无法理解如何使其他方法与动态数组一起工作,从而适当地测试。
是否有人能告诉我是否有更快的完成此操作的方法,并在必要时演示如何实现?
Sub TESTVLOOKUPARRAY()
Dim PSORG1() As Variant
Dim PSORG1Tot As Variant
Dim PSORG1RT As Variant
Dim PSORG2() As Variant
Dim PSORG2Tot As Variant
Dim PSORG2RT As Variant
Sheets("Sheet1").Select
PSORG2RT = Application.CountA(Range("A:A"))
PSORG2Tot = "A1:B" & PSORG2RT
PSORG2 = Range(PSORG2Tot) ' PSORG2 is now an allocated array
Sheets("Sheet2").Select
PSORG1RT = Application.CountA(Range("A:A"))
PSORG1Tot = "A1:B" & PSORG1RT
PSORG1 = Range(PSORG1Tot) ' PSORG1 is now an allocated array
a = 2 ' to increment ORG values in PSORG1
Do
Finish = "No"
b = 1 ' to increment ORG values in PSORG2
Do
If PSORG1(a, 1) = PSORG2(b, 1) Then
PSORG1(a, 2) = PSORG2(b, 2)
Finish = "True"
ElseIf b = PSORG2RT Then
PSORG1(a, 2) = "NULL"
Finish = "True"
End If
b = b + 1
Loop Until Finish = "True"
a = a + 1
Loop Until a = PSORG1RT + 1
Sheets("Sheet2").Select
Set Destination = Range("A1")
Destination.Resize(UBound(PSORG1, 1), UBound(PSORG1, 2)).Value = PSORG1
End Sub