ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]浅谈DICTIONARY(字典)对象

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-12-10 15:08 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
好文。谢谢楼主分享!

但我想问个问题。我的表格有必要使用字典功能吗?
我自个儿想,字典也得历遍,历遍过程中检查是否重复,不重复就加条目;这过程,直接就使用“for each c in range("b2:b"&b0).....next“,或者,用"for i to b0 ......next",这不是更省事吗?
我这样想,所以有附件中的Change事件的设计。不知用字典该怎样写,会不会省事,省时。
附件的目的是想快速录入配偶已录入的人员,我排除重复申请的人员录入。
请老师指点。

Book1.rar

10.03 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2010-12-12 01:28 | 显示全部楼层
好帖,我反复读了很多遍,获益良多。
第240楼的问题已解决。
第235楼的问题通过阅读其他一些帖子,也好像明白了,dic(temp) = dic(temp) + 1可以理解为dic.Item(temp)= dic.ltem(temp)+1的简写形式。不知这样理解对不对?

但,学习中也有一些疑惑,想鸡蛋里挑一点骨头,例6中的代码,我认为并不能像例子的说明那样,把不重复的文本、数字复制,而是将重复的也复制了。

book2.rar

8.62 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2010-12-13 23:19 | 显示全部楼层
Dictionary属性和方法的亮点(与Collection对象相比):

1.key属性可随时更改:

If dic.Exists(OldKey) Then dic.Key(OldKey) = NewKey

2.item属性可随时更改:
If dic.Exists(OldKey) Then dic.Item(OldKey) = NewItem

3.Keys方法可得到一个下界为0的一维数组:

Dim s

s=dic.keys

4.items方法也可得到一个下界为0的一维数组:

Dim s

s=dic.Items

5. Remove 方法可直接删除Dictionary对象的某一个元素,对于VB的一维数组来说,省去了不少编码的烦恼

6. Removeall方法可直接删除Dictionary对象的全部元素

7.对于使用Keys和items方法得到的数组,可以使用VBA的数组的全部技巧进行处理,如Filter(),Join()函数及工作表函数Transpose(),Max(),Min(),Large()等的使用.

8.Count属性为Dictionary数组与EXCEL工作表的相互赋值提供了方便.

9.键值的唯一性使得Dictionary对象在统计"不重复"方面的问题得心应手,而item属性可更改更使得Dictionary对象在数据汇总上大显身手.

10.VBA的一些控件如listbox,combobox,单元格的数据有效性,自定义序列及图表的序列,xvalue属性等也与数组有一定的联系,使得Dictionary对象也有用武之地.

后面的例子将对以上所介绍的内容进行演示

TA的精华主题

TA的得分主题

发表于 2010-12-15 01:40 | 显示全部楼层
又是关于字典的讲座,收藏先,逐个慢慢消化,近来对字典在VBA的使用中所体现的妙用大有体会……
谢谢狼版主……期待有更多精彩的讲座让大家受益~~

TA的精华主题

TA的得分主题

发表于 2010-12-15 10:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-18 17:52 | 显示全部楼层
原帖由 northwolves 于 2007-9-8 18:11 发表
 [前言]      第一次见到字典的用法是在2003年,记得是一个关于列举闰年的帖子,代码大致如下:Sub diag()Dim i As IntegerWith CreateObject("scripting.dictionary")For i = 2000 To 2 ...


来迟了! 心怡已久的东西 ! 感谢狼版辛勤劳作,无私奉献 !

TA的精华主题

TA的得分主题

发表于 2010-12-18 17:54 | 显示全部楼层
原帖由 northwolves 于 2007-9-8 18:11 发表
 [前言]      第一次见到字典的用法是在2003年,记得是一个关于列举闰年的帖子,代码大致如下:Sub diag()Dim i As IntegerWith CreateObject("scripting.dictionary")For i = 2000 To 2 ...


网页出错,无意间重发,却删不了,对不起!

[ 本帖最后由 gfs57 于 2010-12-18 17:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-12-19 22:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-18 17:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好好学习,天天向上.感谢狼版!

TA的精华主题

TA的得分主题

发表于 2011-1-24 20:56 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 10:37 , Processed in 0.034725 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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