VBA字典学习,您只差理解一些概念

当年我求教字典的时候,老人家总结了一句话“呼之即来,挥之即去”

即学会d(a)=s 和 s=d(a) 就差不多了,忘记ADD存在。

一、定义字典

Set d = CreateObject("Scripting.Dictionary")

二、呼之即来,挥之即去

d("张三“)=1 '相当于给字典赋值,张三过来(没有就生成)拿个1站一边去

d("李四”)=2 '相当于给字典赋值,李四过来(没有就生成)拿个2站一边去

d("李四”)=3 '相当于改变值,字典中已经有李四了,李四跑过来,丢下2换个3站一边去

注:这时字典中有两个人的存在,张三=1 和李四=3,相当于实现了去重复的功能

s=d("张三") 's=1 即叫了声张三,张三就告诉你他拿的是1

s=d("李四") 's=3 即叫了声李四,李四就告诉你他拿的是3

s=d("麻子") 's="" 没有找到麻子怎么办呢,字典里就自动生成一个麻子d("麻子") =“”,告诉你他手上是空的

注:这时字典中有三个人的存在,张三=1 ; 李四=3;麻子=“”

三、将字典里的东西变成数组

arr= d.Keys '把名字的集合按先来后到的原则放到一维数组里 arr(0)=“张三” ; arr(1)=“李四” ; arr(2)=“麻子”

arr1=d.Items '把名字对应的值的集合按先来后到的原则放到一维数组里 arr1(0)=“1” ; arr1(1)=“3” ; arr1(2)=“”

四、查找字典中有没有这个人

s=d.Exists(“张三”) 's=True 有的

s=d.Exists(“彭希遴”) 's=False 没有

五、清空数组

d.RemoveAll

Excel

一、建立字典就是申请开五星级大酒店:

Set d = CreateObject("Scripting.Dictionary")

然后,这个酒店就可以拥有任意开房间让客人入住的能力。

二、 字典key就相当于房间的电子钥匙:

每次有客人需要入住,就会在大堂登记,

然后服务总台会按客人入住的先后顺序,

分配一个空房间给新的客人住,

并当场给这个新开的空房间配制一把唯一的、不重复的电子钥匙。

这把钥匙的名字,可长可短,任服务总台定制。

一般最为常见的是文本字符串,或数值用Cstr()转换,

但是如果你愿意,连单元格区域等,都可以成为电子钥匙。

在这里,我们不妨仍按照彭版主例子,暂且用人名做【钥匙】

配钥匙的方法,即语法很简单,就是 d(key) 或写成中文就是 d(钥匙)

但是要注意,配钥匙这个行为,必须和新开房间一起操作,操作内容如下:

三、配好钥匙以后,新开的房间就可以住人、放置物品,或者也可以不住任何人不放任何物品,留着空房间。

但这一步必须做,在对这个新开房间进行【入住】、或【保留】空房间的过程完成以后,

新配的钥匙才会有效。

例如: d("张三")="" ……钥匙名="张三",房间保留为空

或者: d("张三")= 1 ……钥匙名="张三",房间里住进了数值型客人=1

………………

四、已经开出去的房间,只能用配制好的唯一的钥匙打开。

五、用已经配制好的唯一的钥匙打开房间以后,可以随意处置房间内的东西。

六、每次可以到大堂去问一下服务员,我手里拿着的这把钥匙,是否已经开过房间:

d.Exists(钥匙)

七、如果我拿了一把钥匙去问大堂服务员找对应的房间,

如果在已经开出去的房间中没有和这把钥匙对应的房间,

或者说、这把钥匙打不开任何一间已经开出去的房间,

则大堂服务员会马上帮我用这把新钥匙新开一个房间。

d(newkey)=""

八、可以到大堂去退房间,只要交还钥匙就可以了。

d.Remove(key)

一、字典(酒店业务)中,key(钥匙)是唯一的,不重复的。

二、字典key 可以以数组方式返回清单 (相当于大堂总台提供房间、钥匙信息数据)

三、key是按开房间的先后顺序压入堆栈的,不会自动排序(不管是升序还是逆序都没有)

但是,有时候你可以投机取巧,让大家先把钥匙排好序以后,一个接着一个去开房间,

这时候酒店里的钥匙就可以是按照你的顺序排序了的。

(这个又一次反映了,酒店开房间配制钥匙只看先后顺序,不看钥匙本身是啥内容)

四、虽然钥匙不管顺序,但大堂有办法用最快的速度找到每把钥匙唯一对应的房间并打开让你使用……快速电梯。(据说是哈希算法?)

五、一旦钥匙已经用来开过房间,就不能再改了……能改的只是每个房间里的内容。(Item)

而这个对房间内容的操作,其实才是能够看出使用字典者算法功力的实质性问题。

六、只要你有房间钥匙,大堂其实根本不管你是谁哦你都有权利立即处置房间里的内容……

翻译成VBA的含义是,只要你用对了关键词,立即可以按你目前的身份去置换或调用对应Item,而不管这个Item以前是用哪个身份放置进去的内容。

其中一个典型的做法,就是去除重复项。

即,不管外面有几个、甚至几十、几百、几千个“人”,如果他们手里的钥匙相同,

则他们入住酒店都是共用同样的房间,大堂服务员不会帮拿同样钥匙的人每次都新开一个房间。

小伙伴,大家一起学习Excel VBA知识,一起进步。同时欢迎大家帮忙转发并关注,谢谢大家的支持!

本页共70段,2176个字符,5546 Byte(字节)