开发 数组里面的字典_Excel VBA 新手学习笔记 字典基础导论

作者 : 金人瑞(郑广学Excel VBA 175例实战教程学员)

本人为个人学习阶段性总结,如有错漏欢迎指正,希望可以帮助VBA初学者更好地理解字典

本文要点

(1)字典基础说明.

(2)字典的使用示例

(3)基本的字典封装(由于水平有限怕弄巧成拙,这里只提供最基础的部分,想学高级封装推荐excel880网站站长郑广学的教程)

一 字典的基础说明:

字典到底是个啥?不多说上图

4f362c8b260c0bb6e059d362048ce68d.png

我们把以上单元格填装至字典中,探求一下字典的特性,代码如下,使用字典有两种方法,新手推荐第一种,勾选:工具>>>引用>>>Microsoft Scripting Runtime,如下图.第二种方法看图二.字典如何填装图二中的代码

66924dae41f0d8c454ad77e1ea33cce3.png

图一: 勾选:工具>>>引用>>>Microsoft Scripting Runtime

220111aa8b07e7d40e480f7d61e966f0.png

图二:字典的基本填装方法的代码:总结如下图

837ed12201f1367a202f29e5c49e3386.png

总结一下:

其实总共也就两步.核心问题是字典能将关键字和值一一对应,这也就是字典的第一大优点:方便调阅数据.这也是新手学习如何使用字典的时候必须要思考的课题之一:如何发挥字典关键字和值之间一一对应的特点(一组关键字和值对应以后,在字典里被称为条目).

接下来我们来看看字典填装以后有什么效果呢?我们先了解一下字典的常用属性方法

7d54613f916fdbf376a2294ee0428f8c.png

图三,字典的exists方法说明 :写法”字典.existe(关键字)”返回一个布尔值

5778215885de3e607e539d82af1e2ce7.png

图四:字典。 Exists(关键字)>>>返回一个布尔值确定字典中是否存在该关键字

我们现在通过监视窗口观察一下字典,字典中有Keys方法和Items方法,他们用法相似,都是返回一个一维数组,只不过Keys方法返回的是关键字数组,Items方法返回的是值数组.

通过监视窗口观察一下keys和items

e1de6f7d6a6c561e33862e71915d0e9a.png

图五:数据

可以观察到图五中关键字部分是有重复的,但是装入字典以后重复值并不重新填入,14条数据最终只填入了七条,且关键字之间不存在重复数据,这也是字典的第二个特点:关键字不重复,通常可以利用这个属性我们能去重,汇总,计数等

我们现在利用监视窗口来观察一下这些属性究竟是什么类型,有什么规则特点:

22a16392ed7a207febe807e598aea866.png

图六:监视窗口直接观察字典,数据不重复

3d75d86cc54569bfd10915be3e0d10db.png

图七:监视窗口观察字典的keys,关键字

从监视窗口来看,”字典.keys”返回的是一个0下标的一维数组,里面都是关键字。利用这个特点我们可以取出关键字的数据,也可以构建循环批量处理数据,同时也可以利用数组下标获取字典的条目数(一般获取字典的条目数可以利用count属性)。然后我们在观察一下数组里面的数据,我们可以清楚的看到,关键字都是不重复的数据,这就引发了一个思考,那些重复的数据字典里面做了什么处理呢?我们接下来看items属性。

2b421ac753ddd8991c2ab87f8faafb77.png

图八:监视窗口观察字典的items属性演示

这是值数组,同样是一个0下标一维数组,我们观察下面的数据,星期一是116,并不是106,星期二是101,并不是116,这就说明字典是一一对应的,但是有一个特点:关键字于值之间的对应关系字典会采用最新的对应关系,通过这个特点我们其实可以利用累加的方式来汇总和计数。

0df79d5b3d066ba82f44edc8498cffc9.png

例如:按循环的顺序,周一初始对应的是108,后面对应的是116,在字典里只取最后的对应关系,如果要取最初的对应关系,倒过来循环即可.

b097d4247e0a02afcfe7258a0eb4fcbd.png

图九: RemoveAll方法用来清除字典所有数据.

一般RemoveAll方法用于字典重置,可以观察到监视窗口里面字典已经清空了. Remove 方法是清除单个关键字,写法是:”字典.Remove(关键字)”,关键字不存在就会出现一个错误

讲完了keys和items两种方法,我们就可以对比了解一下key属性和item属性,不多说,上图

5fdd7e3fdecca496b32529404d513c36.png

图十:item属性的使用方法

Item属性和items方法区别很大,item属性总结起来其实是添加修改字典的对应目,items则返回一个结果数组

同样,key属性其实是用于修改关键字的,但是与item不同的是,key修改关键字,关键字不存在的话会报错.写法” 字典.Key(旧关键字) = 新关键字”

还有其他方法属性,个人用得不多就不说了。

接下来我们封装一下字典,代码如下,大家不需要了解代码的执行过程,只需要知道丢进去什么参数,传出来什么结果就好.

''***************************************************************************Public Function 计数字典填装(allar, Col As String)Dim alldic '创建字典,采用引用法    Set alldic = CreateObject("Scripting.Dictionary")'Dim alldic As New Dictionary '(勾选引用法)'1/字典两法Dim n As Integer'2/n为总数据数组的行数    n = UBound(allar, 1)'3/数组下标取出, 方便循环,字典装填Dim ckey    ckey = Split(Col, ",") '一个关键字列号数组'4/构建一个一维数组,并将关键字所在数组的列号导入其中Dim key As String'5/钥匙关键字的定义,方便关键字数据导入    For i = 1 To n'6/双循环填充,第一层循环从数组的第一行到最后一行,用于数组数据导入字典        For g = LBound(ckey) To UBound(ckey)'7/双循环填充,第二层循环从ckey数组上下标开始,将关键字各字段拼接            key = key & allar(i, ckey(g))        Next'8/第一层循环结束后再开始add字典,将拼接好的关键字和数组行号对应,下方累积计数,也可以求和,记录行号等        alldic(key) = alldic(key) + 1'9/key字段重 置为空,避免将多行字段拼接.好大一过坑!!!!!!!!!!!!!        key = ""    Next'9/字典的填充完毕    Set 计数字典填装 = alldic'10/字典导出End Function'***************************************************************************

用法如下

函数使用方法:计数字典填装(需要装入字典的数据数组, 关键字段列)>>>>>返回一个计数字典(可以修改为求和汇总字典,查阅数据的行号字典等字典)

函数封装化的结果很明显,我们可以随时调用.不需要再造轮子,可以节约大量时间不过以上就是个例子过于简单,现实中有更复杂的函数,我们其实在很多时候是不需要了解运行过程的,只需要知道传入什么数据,传出什么结果就行,毕竟开车方便快捷,但是总不能会开车的都会造车,开车之前都要造车吧?

以上就是字典常用方法的说明,这儿需要提一点,数组中的元素其实也是可以是数组和字典的,这就是字典嵌套数组,字典嵌套字典,他们能处理更为复杂的数据,能构成更为复杂的数据调阅系统,但是由于笔者水平一般,文章篇幅限制以及技术难度稍大不易吸收就不做阐述,想了解的朋友我推荐郑广学老师,我就是跟他学的,之前自学了很久一直没找到感觉,直到遇到郑老师,才打开了ExcelVBA的新世界大门!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值