【发布时间】:2020-12-22 08:50:21
【问题描述】:
我的以下代码正在运行,但需要时间(大约 10 分钟),有时它会进入无响应模式,因为我的数据大约有 60k 行。
我要做的是比较两个工作表的 A 列中的值,如果值存在于 sh2 但不存在于 sh1 中,则将整行 (A-X) 粘贴到 sh1。
如果有比这更好、更快、更有效的方法,有人可以帮忙吗?
Sub t()
Dim sh1 As Worksheet, sh2 As Worksheet, c As Range
Set sh1 = Workbooks(WK1).Sheets(sheet1)
Set sh2 = Workbooks(WK2).Sheets(sheet1)
For Each c In sh2.Range("A2", sh2.Cells(Rows.Count, 1).End(xlUp))
If Application.CountIf(sh1.Range("A:A"), c.Value) = 0 Then
c.Resize(, 24).Copy sh1.Cells(Rows.Count, 1).End(xlUp)(2)
End If
Next
End Sub
【问题讨论】:
-
获取范围很慢,所以尽量减少 range() 调用的次数。对两张表进行排序,这样您就不必执行 countif() 或将整个查找值范围抓取到数组中并在数组中进行查找。 .哦,还有一个相交运算符在这里也可以很好地工作
标签: excel vba for-loop countif