【发布时间】:2016-07-26 08:36:26
【问题描述】:
我有两个数据集需要比较并从中提取匹配项。我有一个来自每个数据集中 5 列的复合键,结束我需要提取的第 6 列。这些列由文本、日期和整数组成。两组都略低于 50 万行。
目前我在表 a 中使用 for 循环并遍历表 b。将行与带有 and 参数的 if 语句进行比较以获得复合键。
Sub ArraySearch()
Dim Main As Long
Dim Search As Long
Dim arrData() As Variant
Dim arrSource As Variant
arrData = Sheets("Sheet1").Range("H3:M500000").Value
arrSource = Sheets("Ark1").Range("A3:H500000").Value
Main = 1
Search = 1
For Main = 1 To UBound(arrSource, 1)
For Search = 1 To UBound(arrData, 1)
If arrSource(Main, 3) = arrData(Search, 1) And _
arrSource(Main, 4) = arrData(Search, 2) And _
arrSource(Main, 1) = arrData(Search, 3) And _
arrSource(Main, 2) = arrData(Search, 4) And _
arrSource(Main, 5) = arrData(Search, 5) _
Then
arrSource(Main, 8) = arrData(Search, 6)
Exit For
End If
Next
Next
Sheets("Sheet2").Range("A3:H500000") = arrSource
End Sub
到目前为止,最快的方法是将两个表加载到一个数组中并执行内存循环。
这是永远的。我们说的是小时而不是分钟。
有什么方法可以提高速度吗? 还是我需要使用其他程序? (将其加载到数据库中并使用 SQL,将 Visual Studio 与普通 VB.net、SSIS 一起使用)
我希望这可以在 VBA 中完成,因此非常感谢任何指针。
编辑
散列 5 列键会提高速度,还是必须迭代的行的共享量造成了延迟?
【问题讨论】: