【发布时间】:2015-01-13 07:11:23
【问题描述】:
我正在执行“类似加入”的操作(类似于数据库),其中我有两个不同的数据集 A 和 B,它们有一些共同的标识符(我们称之为“id”)。我的目标是创建第三个数据集 C,它由 A 和 B 的交集组成(加入 id)。在 SQL 中,相应的查询类似于
SELECT a.id, a.some_column, b.another_column
FROM a,b
WHERE a.id = b.id
我可以在 Excel 中执行相同的操作,方法是遍历 A 的 id 列中的所有行,并对 A 中的每一行在 B 的 id 列上执行 Range.Find。像这样:
For Each r in Worksheet_A.Range(Cells(start_row_a,id_column_a),Cells(end_row_A,id_column_a))
Set found = Worksheet_B.Range(Cells(start_row_b,id_column_b),Cells(end_row_b,id_column_b)).Find(r.Value)
If Not found is Nothing Then
' write stuff to Worksheet_C, e.g. found.Value, found.Offset(0,1).Value, r.Offset(0,-1).Value, etc.
End If
Next r
这很好用,但速度很慢。我知道像 VB 这样的语言中的显式循环非常慢。我的问题是:有没有更快的路?我错过了一个更好的实现吗?我能在 SO 上找到的最接近的问题是 here,但我并不真正了解最佳答案,我不确定它是否适用于我的场景。
【问题讨论】:
标签: performance vba excel