ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1037|回复: 3

[求助] 关于字典查询的几个高端(Cai Niao)问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-22 08:48 | 显示全部楼层 |阅读模式
            最近在做个 字典类似 VLOOKUP 的功能,其中几段代码无法提速,求帮助。。。
两个表格是2个不同的文件,字典表,和显示表。
首先加载字典部分没有问题,7万多行运行只要1~2秒,
问题出在匹配的时候


显示表有 9万多行,我要补全的数据是从 B列的尽头开始,
所以我要匹配的数据也是要从O列(关键字列)对应的B列尽头行开始匹配,
匹配后从B列尽头开始填充.
如图:

1.png
O列对应关系图:
3.png


匹配和填充部分代码如下: 问题在代码后面红字。。
这段代码匹配3万多行数据 时间超过 30秒。。。很慢。。

Sheets("SO cost").Activate
    lr2 = Sheets("SO cost").[O99999].End(3).Row
    lr3 = Sheets("SO cost").[B99999].End(3).Row   这里定义了配的起始单元行。。
    brr = Range(Cells(lr3, "O"), Cells(lr2, "O"))  但是这里使用lr3时,不能匹配到任何值。。。只用使用brr = Range(Cells(2, "O"), Cells(lr2, "O"))
    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 1 To UBound(brr)
        For Each k In d.keys
        If StrComp(brr(i, 1), k) > 0 Then
            crr(i, 1) = d(k)(0)
            End If
        Next
    Next

[B2].Resize(UBound(crr), 1) = crr    这里的[B2]要怎么样带入变量,因为我要从B列的尽头开始填写,不是B2



全部代码截图:
4.png

TA的精华主题

TA的得分主题

发表于 2019-1-22 09:05 | 显示全部楼层
说再多也没用,关键是上传附件。

TA的精华主题

TA的得分主题

发表于 2019-1-22 09:36 | 显示全部楼层
本帖最后由 小fisher 于 2019-1-22 09:37 编辑

遍历字典关键字来对比的效率太低了,这样做就失去使用字典的意义了,还不如用数组来得快,应该这样用:
  1. 'For Each k In d.Keys
  2. 'If StrComp(brr(i, 1), k) > 0 Then
  3. If d.Exists(brr(i, 1)) Then
  4.     crr(i, 1) = d(brr(i, 1))(0)
  5. End If
  6. 'Next
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-22 10:52 | 显示全部楼层
小fisher 发表于 2019-1-22 09:36
遍历字典关键字来对比的效率太低了,这样做就失去使用字典的意义了,还不如用数组来得快,应该这样用:

哎呦!!小鲜花奉上。。。高手指点一二。。速度翻倍。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-17 02:49 , Processed in 0.039627 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表