【发布时间】:2015-06-26 10:35:49
【问题描述】:
我目前正在运行一个宏,它在工作表 2 的 C 列中从“工作表 1”的 A 列中查找值,如果这些匹配,则应该将工作表 1 的 B 列中的值复制到表 2 中的相应行。
我的宏可以工作,但因为这是一个庞大的工作表,其中的循环花费了太多时间。这是因为工作表 1 大约有 300,000 行,并且每个实例中的值都是唯一的。在 Sheet 2 中大约有 50,000 行。它已经运行了一夜,到目前为止,工作表 1 中只达到了 60,000 行
我绝不是 VBA 专家,甚至不是中级专家,但从我所读到的内容来看,使用 Find 可能比查找匹配和循环更快?
这是我当前使用的宏
Option Explicit
Sub lookupandcopy()
Application.Screenupdating = True
Dim j As Long, i As Long, lastRow1 As Long, lastRow2 As Long
Dim sh_1, sh_3 As Worksheet
Dim MyName As String
Set sh_1 = Sheets("sheet1")
Set sh_3 = Sheets("sheet2")
lastRow1 = sh_1.UsedRange.Rows.Count
For j = 2 To lastRow1
MyName = sh_1.Cells(j, 1).Value
lastRow2 = sh_3.UsedRange.Rows.Count
For i = 2 To lastRow2
If sh_3.Cells(i, 3).Value = MyName Then
sh_3.Cells(i, 13).Value = sh_1.Cells(j, 2).Value
End If
Next i
Next j
Application.Screenupdating = True
End Sub
如果我遗漏了任何内容或任何其他需要的细节,请告诉我!
【问题讨论】:
-
第 3 行应该是 Application.ScreenUpdating = False
-
对不起,它在实际代码中是正确的,但它在另一台机器上运行,所以我不得不在这里重新输入。
-
为什么用 sh_3 来指代 sheet2?一个关键问题是 sheet1 A 列中的值是否唯一。如果是——为什么不使用简单的 vlookup?
-
sh_3 用于避免我输入错误(像手指一样的大猩猩),Vlookup 会更快吗?我一直认为它对于大量数据来说太慢了,通常会尽量避免它
-
@Els 但为什么不为“sheet2”使用 sh_2?