作者:绿色风
分类:
时间:2022-08-18
浏览:122
楼主 sxk |
用字典方法代替Vlookup vlookup函数在查找匹配超过6万行数据时很慢,想用字典的方法来代替,程序中部分代码取自网络,稍改了一下,结果能实现了,找查25万行的数据只要5秒钟,如果用vlookup,要30分钟,有的电脑可能死机. 此段字典代码能同时实现了,多表,多列一次提取。速度很快。由于社区上传受限。例子的数据只有几十行。大家可以试导入几十万行。注意修改里面的数值就可以。如改Range("a65536").End(xlUp).Row 中65535 为1048576就可以了
新建一个工作簿, 新建模块1
- Public g As Object
- Public Sub test()
- begin = Time
- Set g = New 类1
- 'Sheets("表1").Select
- r = Range("a1", [a65535].End(3))
- For i = 1 To UBound(r)
- r(i, 1) = Look(r(i, 1))
- Next
- Range("b1:b" & [a65535].End(3).Row) = r
- Call test1
- Set g = Nothing
- Set d = Nothing
- MsgBox "总共用时" & (Time - begin) & "s"
- End Sub
- Public Function Look(S)
- Look = g.d(S)
- End Function
- Public Sub test1()
- Set g = New 类2
- Sheets("表1").Select
- r = Range("a1", [a65535].End(3))
- For i = 1 To UBound(r)
- r(i, 1) = Look(r(i, 1))
- Next
- Range("C1:C" & [a65535].End(3).Row) = r
- End Sub
新建类1
- Public d As Object
- Private Sub Class_Initialize()
- Set d = CreateObject("scripting.dictionary")
- 'Sheets("表2").Select
- r = [D1:E1000]
- For i = 1 To UBound(r)
- d(r(i, 1)) = r(i, 2)
- Next
- End Sub
- Private Sub Class_Terminate()
- Set d = Nothing
- End Sub
新建类2
- Public d As Object
- Private Sub Class_Initialize()
- Set d = CreateObject("scripting.dictionary")
- Sheets("表2").Select
- r = [A1:B1000]
- For i = 1 To UBound(r)
- d(r(i, 1)) = r(i, 2)
- Next
- End Sub
- Private Sub Class_Terminate()
- Set d = Nothing
- End Sub
用字典代替vlookup.rar |
2楼 zjwww |
不错,学习了! |
3楼 永乐大典 |
正好需要的,我的一个程序用VLOOKUP更新需要1个小时,我正在找提高速度方法呢 |
4楼 opelwang |
做成自定义函数就好了。 |
5楼 jeman |
好棒,谢谢分享 |
6楼 sallyss0 |
现在还看不太懂 留着 |
7楼 yeminqiang |
不错学习了
|
8楼 資料更新中…… |
虽然用不着,但是学习l |
9楼 sea9413 |
一直在找提高表格计算的办法,感谢啊 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一