ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求指导,这个代码能否简化,数据类型不一样怎么办啊?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-20 11:44 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位老师好,我刚接触字典,平时在论坛中看到大佬们用字典6得飞起,我非常的佩服,也按照论坛的的方法慢慢的学习,现在绞尽脑汁写了一个,但是发现非常的长,我觉得应该不是这样的,应该能更简练,求各位老师指导,我这样写是不是错了?

然后发现有的数据类型不对的,也匹配不了,麻烦各位老师指导一下,感谢!!
具体见附件。


Sub 字典计算()
t = Timer
Dim d As Object, d1 As Object, arr, brr
Set d = CreateObject("scripting.dictionary")
Set d1 = CreateObject("scripting.dictionary")
Set qdgh = Sheets("做字典")
Set xrw = Sheets("第一个")
Set kd = Sheets("第二个")
Set qyb = Sheets("第三个")
arr = qdgh.[a1].CurrentRegion
    For i = 1 To UBound(arr)
        d(arr(i, 1)) = arr(i, 2)
    Next i
    For j = 1 To UBound(arr)
        d1(arr(j, 1)) = arr(j, 3)
    Next j
r = xrw.Cells(Rows.Count, "A").End(3).Row
brr = xrw.Range("A2:A" & r)
     For k = 1 To UBound(brr)
        brr(k, 1) = d(brr(k, 1))
     Next k
xrw.Range("B2:B" & r) = brr
brr = xrw.Range("A2:A" & r)
     k = 1
     For k = 1 To UBound(brr)
        brr(k, 1) = d1(brr(k, 1))
     Next k
xrw.Range("C2:C" & r) = brr

r = kd.Cells(Rows.Count, "A").End(3).Row
brr = kd.Range("A2:A" & r)
     k = 1
     For k = 1 To UBound(brr)
        brr(k, 1) = d(brr(k, 1))
     Next k
kd.Range("B2:B" & r) = brr

brr = kd.Range("A2:A" & r)
     k = 1
     For k = 1 To UBound(brr)
        brr(k, 1) = d1(brr(k, 1))
     Next k
kd.Range("C2:C" & r) = brr

r = qyb.Cells(Rows.Count, "A").End(3).Row
brr = qyb.Range("A2:A" & r)
     k = 1
     For k = 1 To UBound(brr)
        brr(k, 1) = d(brr(k, 1))
     Next k
qyb.Range("B2:B" & r) = brr

brr = qyb.Range("A2:A" & r)
     k = 1
     For k = 1 To UBound(brr)
        brr(k, 1) = d1(brr(k, 1))
     Next k
qyb.Range("C2:C" & r) = brr

MsgBox "匹配完成:" & Format(Timer - t, "0.000秒")

End Sub


学习字典.zip

24.9 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2024-11-20 13:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
提供一下几点建议:
1.字典和数组的结合使用(学习字典必须得会)
2.字符的类型转换函数使用
3.多维数组一起处理减少循环

image.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-11-20 13:55 | 显示全部楼层
本帖最后由 loirol 于 2024-11-20 14:00 编辑

1. 字典嵌套,不用定义两个字典,这里只有匹配1和匹配2,如果有50列不得定义50个字典
一定要定义两个字典,两个字典的循环也不需要分开写
  1. for i= 2 to ubound(arr)
  2.     d(arr(i,1)) = arr(i,2)
  3.     d1(arr(i,1))= arr(i,3)
  4. next
复制代码

2. 另外a列有数值有文本,需要转换
3. sheets一样可以遍历,不用每个定义

image.png

学习字典.rar

26.49 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-11-20 14:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png
练习字典

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-20 15:15 | 显示全部楼层
小凡、、、 发表于 2024-11-20 13:45
提供一下几点建议:
1.字典和数组的结合使用(学习字典必须得会)
2.字符的类型转换函数使用

感谢您的指导,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-20 15:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
loirol 发表于 2024-11-20 13:55
1. 字典嵌套,不用定义两个字典,这里只有匹配1和匹配2,如果有50列不得定义50个字典
一定要定义两个字典 ...

好的,我慢慢看下才行,我也觉得我用得太啰嗦了,哈哈,感谢您的指导!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-20 15:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

感谢您的指导!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-20 15:28 | 显示全部楼层
本帖最后由 wds1061 于 2024-11-20 15:39 编辑
loirol 发表于 2024-11-20 13:55
1. 字典嵌套,不用定义两个字典,这里只有匹配1和匹配2,如果有50列不得定义50个字典
一定要定义两个字典 ...

对了,麻烦再问下,如果需要匹对的数据每个表都不在同一列,最终的匹配结果不是都固定在B和C了,而是都在不同列,那应该怎么写呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-20 15:33 | 显示全部楼层

那能再请教一个问题吗?如果需要匹对的列和结算输出的列都不同,如第一个是要按C列匹对,结果输出到F、G列,第二个表是按T列匹配,要输出到Y、Z列,第二个表是按S列匹配,要输出到AB、AC列,这个是应该怎么写呢?

TA的精华主题

TA的得分主题

发表于 2024-11-20 16:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

学习字典.rar

27.62 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 00:58 , Processed in 0.050925 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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