分享

VBA入门:字典对象

 惠阳居士 2017-12-13

本文为《Excel 2016应用大全》扩展内容


字典对象可以简单地理解为一个特殊的二维数组。字典对象的第一列为Key(键,该列具有唯一性和不重复性,这个是字典对象最重要的特性之一;第二列为Item(条目)可以保存各种类型的变量。

字典对象简单易用,而且可以极大地提升程序的运行效率。字典对象有六种方法(Add,Keys,Items,Exists,Rmove和RemoveAll和四个属性(CountKeyItemCompareMode参见表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为对应“产品的销售数量累计值。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多