搜索
查看: 2331|回复: 0

VBA入门:字典对象

[复制链接]

977

主题

1093

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15934
发表于 2018-9-2 17:09:55 | 显示全部楼层 |阅读模式
字典对象可以简单地理解为一个特殊的二维数组。字典对象的第一列为Key(键),该列具有唯一性和不重复性,这个是字典对象最重要的特性之一;第二列为Item(条目)可以保存各种类型的变量。
字典对象简单易用,而且可以极大地提升程序的运行效率。字典对象有六种方法(Add,Keys,Items,Exists,Rmove和RemoveAll)和四个属性(Count,Key,Item和CompareMode),参见表47-1。
属性
说明
CompareMode
设定或返回Key的字符串比较模式
Count
只读。返回 Dictionary 里的键/条目的数量
Item(key)
设定或返回指定关键字的条目值
Key(key)
设定键值
Add(key,item)
增加键/条目对到 Dictionary
Exists(key)
如果指定的键存在,返回 True,否则返回 False
Items()
返回一个包含 Dictionary 对象中所有条目的数组
Keys()
返回一个包含 Dictionary 对象中所有键的数组
Remove(key)
删除一个指定的键/条目对
RemoveAll()
删除全部键/条目对
表 47-1    Dictionary对象的属性和方法


使用字典对象统计销售记录
字典对象最典型的应用场景是获取数据的唯一值。示例文件中销售数据如图 44-2所示。
图 44-2    销售数据
单击工作表中的“运行代码”按钮,统计结果如图 44-3所示。
图 44-3    销售数据统计结果
示例代码如下:

#001  Sub DicDemo()
#002      Dim objDict As Scripting.Dictionary, arData
#003      Dim iR As Integer, sKey As String
#004      Set objDict = CreateObject("Scripting.Dictionary")
#005      arData = ActiveSheet.[a1].CurrentRegion.Value
#006      For iR = 2 To UBound(arData, 1)
#007          sKey = arData(iR, 2)
#008          If objDict.Exists(sKey) Then
#009              objDict(sKey) = objDict(sKey) + _
                         Val(arData(iR, 3))
#010          Else
#011              objDict.Add sKey, Val(arData(iR, 3))
#012          End If
#013      Next iR
#014      With ActiveSheet
#015          .[G2].Resize(objDict.Count, 1).Value = _
                     Application.Transpose(objDict.Keys)
#016          .[H2].Resize(objDict.Count, 1).Value = _
                     Application.Transpose(objDict.Items)
#017      End With
#018  End Sub


代码解析   

1
第4行代码用于创建字典对象。

2
第5行代码将示例工作表中的数据加载到数组arData,其中CurrenRegion返回A1单元格的当前数据区域。

3
第6行到第13行代码使用For…Next循环遍历数组中的销售数据。

4
第7行代码将“产品”保存在变量sKey中,作为统计的关键字段。

5
第8行代码使用字典对象的Exists方法判断字典对象中是否已经存在相同的“产品”。如果已经存在,那么第9行代码将第3列的销售数量进行累加,否则第11行代码将新的“产品”和销售数据添加到字典对象中。

6
第15行和第16行代码将字典对象中数据写入工作表中,其中objDict.Keys为“产品”列表,objDict.Items为对应“产品”的销售数量累计值。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

表格智创网

网站简介:表格智创网,是一家以表格设计和技能分享的专业社区,由会计帮帮网投资建设,尽专业,助提高专业技能。

表格智创网欢迎您!

联系我们

  • 工作时间:早上9:00-16:00
  • 客服电话:18668755857
  • 本站网址:www.excelwps.com
  • 淘宝店址:kjbbw.taobao.com

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

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