VBA中的VLOOKUP

Sub 优化()
t = Timer
Dim i, j, k, m
Dim arr()
Dim arr2
Dim Rng As Object, S2 As Object
Dim R2, R3 As Long
Application.ScreenUpdating = False '停止更新屏幕
'清除原订单状态
Set S2 = Sheet2
R2 = S2.UsedRange.Rows.Count
For i = 20 To 83 Step 9
If Rng Is Nothing Then
Set Rng = S2.Range(S2.Cells(2, i), S2.Cells(R2, i))
Else
Set Rng = Union(Rng, S2.Range(S2.Cells(2, i), S2.Cells(R2, i)))
End If
Next
Rng.ClearContents
Set d = CreateObject("scripting.dictionary") '建立字典
Sheet6.Select
arr() = Sheet6.Range("a1:b" & Sheet6.Range("a1048576").End(xlUp).Row)
For i = 1 To Sheet6.Range("a1048576").End(xlUp).Row
d(arr(i, 1)) = arr(i, 2)
Next
R2 = Sheet2.UsedRange.Rows.Count
R3 = Sheet3.UsedRange.Rows.Count
k = 0
Sheet2.Select '匹配年度
For m = 1 To 8
arr2 = Range(Cells(1, 19 + k), Cells(R2, 19 + k)).Value
ReDim arr3(2 To R2, 1 To 1)
For j = 2 To R2
If d.exists(arr2(j, 1)) Then '提出字典中内容,进行比对
arr3(j, 1) = d(arr2(j, 1))
End If
Next
Cells(2, 20 + k).Resize(R2 - 1, 1).Value = arr3()
k = k + 9
Next
Sheet3.Select '匹配结转
Sheet3.Range("p1:p" & Sheet3.Range("g1048576").End(xlUp).Row).ClearContents
Sheet3.Range("h1:h" & Sheet3.Range("g1048576").End(xlUp).Row).Copy
Sheet3.Range ("p1")
Sheet3.Range("h1:h" & Sheet3.Range("g1048576").End(xlUp).Row).ClearContents
Sheet3.Range("h1") = Sheet6.Name
arr2 = Range(Cells(1, 7), Cells(R3, 7)).Value
ReDim arr3(2 To R3, 1 To 1)
For j = 2 To R3
If d.exists(arr2(j, 1)) Then '提出字典中内容,进行比对
arr3(j, 1) = d(arr2(j, 1))
End If
Next
Cells(2, 8).Resize(R3 - 1, 1).Value = arr3
MsgBox Format(Timer - t, "0.000000")
Application.ScreenUpdating = True '开启更新屏幕End Sub
End Sub

这是网络大神优化之前的


Sub 搞事情()
t = Timer
Dim i, j, k, m
Dim arr()

'清除原订单状态
Sheet2.Range("t2:t" & Sheet2.Range("t1048576").End(xlUp).Row).ClearContents
Sheet2.Range("ac2:ac" & Sheet2.Range("ac1048576").End(xlUp).Row).ClearContents
Sheet2.Range("al2:al" & Sheet2.Range("al1048576").End(xlUp).Row).ClearContents
Sheet2.Range("au2:au" & Sheet2.Range("au1048576").End(xlUp).Row).ClearContents
Sheet2.Range("bd2:bd" & Sheet2.Range("bd1048576").End(xlUp).Row).ClearContents
Sheet2.Range("bm2:bm" & Sheet2.Range("bm1048576").End(xlUp).Row).ClearContents
Sheet2.Range("bv2:bv" & Sheet2.Range("bv1048576").End(xlUp).Row).ClearContents
Sheet2.Range("ce2:ce" & Sheet2.Range("ce1048576").End(xlUp).Row).ClearContents

Set d = CreateObject("scripting.dictionary") '建立字典
Sheet6.Select
arr() = Sheet6.Range("a1:b" & Sheet6.Range("a1048576").End(xlUp).Row)
For i = 1 To Sheet6.Range("a1048576").End(xlUp).Row
d(arr(i, 1)) = arr(i, 2)
Next

Sheet2.Select '匹配年度
For m = 1 To 8
    For j = 1 To Sheet2.Range("a1048576").End(xlUp).Row
    If d.exists(Cells(j, 19 + k).Value) Then '提出字典中内容,进行比对
    Cells(j, 20 + k) = d(Cells(j, 19 + k).Value)
    End If
    Next
    k = k + 9
Next

Sheet3.Select '匹配结转
Sheet3.Range("p1:p" & Sheet2.Range("p1048576").End(xlUp).Row).ClearContents
Sheet3.Range("h1:h" & Sheet2.Range("p1048576").End(xlUp).Row).Copy Sheet3.Range("p1")
Sheet3.Range("h1:h" & Sheet2.Range("p1048576").End(xlUp).Row).ClearContents
Sheet3.Range("h1") = Sheet6.Name

For j = 1 To Sheet3.Range("g1048576").End(xlUp).Row
If d.exists(Cells(j, 7).Value) Then '提出字典中内容,进行比对
Cells(j, 8) = d(Cells(j, 7).Value)
End If
Next

MsgBox Format(Timer - t, "0.000000")
End Sub

来源网络,仅供学习

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 字典 补充说明 上面这段涉及到了数组、两种循环方式,对初学者来说还是比较难理解的,所以改了一个稍微简单一点的版本。...
    慕海生阅读 1,341评论 0赞 0
  • 华为官方今日宣布,华为Mate 20 X 获得中国首张5G终端电信设备进网许可证,同时该机也是同时支持SA/NSA...
    IC全球购阅读 928评论 0赞 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 9,108评论 28赞 54
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 4,221评论 0赞 5
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 6,061评论 3赞 8

友情链接更多精彩内容