ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 用字典代替vlookup实现几十万行多表多列提取数据

用字典代替vlookup实现几十万行多表多列提取数据

作者:绿色风 分类: 时间:2022-08-18 浏览:122
楼主
sxk
用字典方法代替Vlookup          vlookup函数在查找匹配超过6万行数据时很慢,想用字典的方法来代替,程序中部分代码取自网络,稍改了一下,结果能实现了,找查25万行的数据只要5秒钟,如果用vlookup,要30分钟,有的电脑可能死机.
          此段字典代码能同时实现了,多表,多列一次提取。速度很快。由于社区上传受限。例子的数据只有几十行。大家可以试导入几十万行。注意修改里面的数值就可以。如改Range("a65536").End(xlUp).Row 中65535 为1048576就可以了

新建一个工作簿,
新建模块1

  1. Public g As Object
  2. Public Sub test()
  3. begin = Time
  4. Set g = New 类1
  5. 'Sheets("表1").Select
  6. r = Range("a1", [a65535].End(3))
  7. For i = 1 To UBound(r)
  8. r(i, 1) = Look(r(i, 1))
  9. Next
  10. Range("b1:b" & [a65535].End(3).Row) = r
  11. Call test1
  12. Set g = Nothing
  13. Set d = Nothing
  14. MsgBox "总共用时" & (Time - begin) & "s"
  15. End Sub

  16. Public Function Look(S)
  17. Look = g.d(S)
  18. End Function
  19. Public Sub test1()
  20. Set g = New 类2
  21. Sheets("表1").Select
  22. r = Range("a1", [a65535].End(3))
  23. For i = 1 To UBound(r)
  24. r(i, 1) = Look(r(i, 1))
  25. Next
  26. Range("C1:C" & [a65535].End(3).Row) = r
  27. End Sub


新建类1


  1. Public d As Object
  2. Private Sub Class_Initialize()
  3. Set d = CreateObject("scripting.dictionary")
  4. 'Sheets("表2").Select
  5. r = [D1:E1000]
  6. For i = 1 To UBound(r)
  7. d(r(i, 1)) = r(i, 2)
  8. Next
  9. End Sub

  10. Private Sub Class_Terminate()
  11. Set d = Nothing
  12. End Sub



新建类2


  1. Public d As Object
  2. Private Sub Class_Initialize()
  3. Set d = CreateObject("scripting.dictionary")
  4. Sheets("表2").Select
  5. r = [A1:B1000]
  6. For i = 1 To UBound(r)
  7. d(r(i, 1)) = r(i, 2)
  8. Next
  9. End Sub

  10. Private Sub Class_Terminate()
  11. Set d = Nothing
  12. 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总版主之一

评论列表
sitemap