ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 常见字典用法集锦及代码详解

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-20 10:50 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
蓝老师,您好!最近刚接触VBA,听说有个字典,于是找到了您的关于字典的详细介绍。写的非常好,非常详细,可我总也理解不透,总也掌握不好。里面有一个关于Item属性的,是这样描述的“如果在改变一个 key 的时候没有找到该 item,那么将利用所指定的 newitem 创建一个新的 key。”,我的理解是当改变一个item的时候没有找到该key,便用item创建一个key,对吗?

TA的精华主题

TA的得分主题

发表于 2018-3-20 11:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mark留名学习,多谢分享指导

TA的精华主题

TA的得分主题

发表于 2018-3-21 04:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-21 10:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
必须给一个大大的赞

TA的精华主题

TA的得分主题

发表于 2018-3-21 11:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cmgk 于 2018-3-22 15:03 编辑

谢谢楼主!

TA的精华主题

TA的得分主题

发表于 2018-3-24 13:27 | 显示全部楼层
实例9  字典取行数,数组重新赋值 运行出现问题

如果将B列 R(2,3)和R(2,4)值设置为相同,R(6,2)和R(7,2)的值也相同,运行结果未出现错误!

及最终的结果只能合并第2列3行,4行的内容,6,7行内容不能合并??

实例9_字典取行数组重新赋值.7z

11.61 KB, 下载次数: 4

字典

TA的精华主题

TA的得分主题

发表于 2018-3-24 13:33 | 显示全部楼层
实例9  字典取行数,数组重新赋值

如下图所示
实例9  字典取行数,数组重新赋值.jpg

TA的精华主题

TA的得分主题

发表于 2018-3-24 22:27 | 显示全部楼层

Sub yy()
'by:Zamyi
Dim d As New Dictionary, R
Dim k, i, j
R = Sheet1.[a1].CurrentRegion
k = 1

For i = 2 To UBound(R)
    R(i, 2) = Replace(Replace(R(i, 2), "(", "("), ")", ")")
    If d.Exists(R(i, 2)) And d(R(i, 2)) <> "" Then        ‘此处加d(R(i, 2)) <> "" 判断
        
        R(d(R(i, 2)), 1) = R(d(R(i, 2)), 1) & " " & R(i, 1)
        R(d(R(i, 2)), 4) = R(d(R(i, 2)), 4) & " " & R(i, 4)
        R(d(R(i, 2)), 5) = Val(R(d(R(i, 2)), 5)) + R(i, 5)
        R(d(R(i, 2)), 6) = Val(R(d(R(i, 2)), 6)) + R(i, 6)
    Else
        k = k + 1
      d(R(i, 2)) =k                    ’此处原为 d(R(i,2))=i
        For j = 1 To UBound(R, 2)
        
            R(k, j) = R(i, j)
        Next
  End If
Next
With Sheet2
    .Cells.ClearContents
    .Cells.Borders.LineStyle = xlNone
    .[a1:F1].Resize(d.Count + 1) = R
    .[a1:F1].Resize(d.Count + 1).Borders.LineStyle = 1
End With
Set d = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2018-3-24 22:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实例9  字典取行数,数组重新赋值

这条代码在实际工作中我相信我被经常用到,所以在阅读前自己在没有看已存在的代码的情况下尝试着去编写,结果始终没有想到一个好的方法,后来参考了作者的代码,茅塞顿开,惊叹于编码作者的思路,代码简洁明了,构思巧妙,像我这样资质一般的人很难有这样的奇思构想,再次给作者的思路点赞!!

按照上面的原有的代码运行时,若只有一处相同项,运行结果正确,如果有多处不同的相同项出现,运行结果出现错误,一直在查找原因,差不多一周时间吧,知道今天算是找到答案了!能够解决今后实际工作中的问题,花时间找错并得到正确结果我觉得是值得的,不过过程确实有点痛苦......

在此多谢 蓝版主的辛勤劳作和无私奉献!

TA的精华主题

TA的得分主题

发表于 2018-3-26 17:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
简直是天书啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 23:31 , Processed in 0.049115 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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