ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教字典嵌套如何将子key和子item返回到单元格区域

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-14 14:43 | 显示全部楼层
补充字典学习笔记:
修改KEY值的实例,要求将区域中重复数据删除

  1. Sub ModifyKey()
  2. Set d = CreateObject("scripting.dictionary")
  3. For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  4.     d(Cells(i, 1).Value) = i
  5. Next
  6. For Each k In d.keys
  7.     d.key(k) = d(k)
  8. Next
  9. For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
  10.     If Not d.exists(i) Then Rows(i).Delete
  11. Next
  12. End Sub
复制代码

修改KEY.png

字典修改KEY值案例.rar

12.22 KB, 下载次数: 70

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-14 14:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
关键知识点:
object.key(key)=newkey
object.item(key)=newitem(此处item可以省略简写为object.(key)=newitem)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-14 15:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 autumnalRain 于 2016-2-15 10:31 编辑

字典的item可以装数值,文本,数组,RANGE对象,以及嵌套字典等
以上面为例,求出不重复的数据。以下代码为字典ITEM装入单元格对象。切记 Set d(Cells(i, 1).Value) = Range(Cells(i, 1), Cells(i, 4))对象赋值时Set不能省略
  1. rem 可以将d(d.keys()(i - 1)).Copy Cells(i + 10, 1)改为range(cells(i+10,1),cells(i+10,4)=d(d.keys()(i-1))
  2. Sub NonRepeatingValue()
  3. Dim d As Object, i As Integer
  4. Set d = CreateObject("scripting.dictionary")
  5. For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  6.     Set d(Cells(i, 1).Value) = Range(Cells(i, 1), Cells(i, 4))
  7. Next
  8. For i = 1 To d.Count
  9.     d(d.keys()(i - 1)).Copy Cells(i + 10, 1)
  10. Next
  11. End Sub
复制代码



字典修改KEY值案例.rar

11.41 KB, 下载次数: 43

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-17 10:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub dicnesting()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     For j = 4 To [a4].End(xlDown).Row
  4.         If Not d.exists(Cells(j, 1).Value) Then
  5.             Set d(Cells(j, 1).Value) = CreateObject("scripting.dictionary")
  6.         End If
  7.         d(Cells(j, 1).Value)(Cells(j, 2).Address) = ""
  8.     Next j
  9.     For Each k In d.keys
  10.         a = a + 1
  11.         Cells(a + 3, 9).Resize(1, d(k).Count).Value = Application.Transpose(Range(Join(d(k).keys, ":")))
  12.     Next
  13.         Cells(4, 8).Resize(d.Count) = Application.Transpose(d.keys)
  14. End Sub
复制代码

利用字典嵌套重新排列数据.png

dicnesting.zip

13.04 KB, 下载次数: 44

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-17 10:59 | 显示全部楼层
利用字典嵌套将相同内容的单元格着相同随机色

注意14行逗号与24楼11行冒号在使用时的区别
  1. Sub 修改成随机色()
  2.     Dim arr, i%, c
  3.     Application.ScreenUpdating = False
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Cells.Interior.ColorIndex = xlNone
  6.     For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row
  7.         If Not d.exists(Cells(j, 1).Value) Then
  8.             Set d(Cells(j, 1).Value) = CreateObject("scripting.dictionary")
  9.         End If
  10.         d(Cells(j, 1).Value)(Cells(j, 1).Address) = ""
  11.     Next j
  12.     For Each c In d.keys
  13.         If d(c).Count > 1 Then
  14.             Range(Join(d(c).keys, ",")).Interior.ColorIndex = Int(Rnd * 56)
  15.         End If
  16.     Next
  17.     Application.ScreenUpdating = True
  18. End Sub
复制代码
利用字典嵌套使相同单元格着相同随机色.png

相同值着相同随机色.zip

14.96 KB, 下载次数: 40

TA的精华主题

TA的得分主题

发表于 2016-11-17 11:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
autumnalRain 发表于 2016-11-17 10:59
利用字典嵌套将相同内容的单元格着相同随机色

注意14行逗号与24楼11行冒号在使用时的区别

建议楼主将此贴转移到“分享”版块中,方便大家学习。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-17 11:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2016-11-17 11:05
建议楼主将此贴转移到“分享”版块中,方便大家学习。

谢谢老师鼓励。这上面大部分内容是其他老师解答的,少量部分是自己揣摩,一般分享都是原创的东西,所以还是不放了吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-12-3 21:03 | 显示全部楼层
我几乎从来不用词典嵌套,哪怕N级菜单也用一个词典解决。词典嵌套的优点是层次清楚,易于理解,缺点则在于所使用的词典数量难以控制,关键字较多,嵌套层次深的时候容易卡死。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-11-14 13:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习     谢谢分享

TA的精华主题

TA的得分主题

发表于 2019-8-16 10:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

如果ITEMS 是多个列的呢,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 12:15 , Processed in 0.044696 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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