分享

VBA中的字典二,字典的应用之去重,统计和求和

 拾叁亿人 2022-05-31 发布于云南

这是关于字典的第二篇文章,聊聊字典的应用之去重,统计和求和

我们这边说的去重,也就是平常所说的求不重复值的问题。

如下图所示,这是一份成绩单。

姓名

科目

成绩

张三

语文

90

张三

数学

96

张三

英语

92

李四

语文

93

李四

数学

94

李四

英语

100

李四

科学

99

王五

语文

96

王五

数学

97

王五

英语

100

孙七

语文

99

孙七

数学

89

孙七

英语

90

孙七

科学

95

首先,第一个问题,我们要统计共有几个人。也就是我们所说的去重。

代码如下:

Dim d As ObjectDim i As LongDim mingzi As StringSet d = CreateObject('Scripting.Dictionary')For i = 2 To [a65536].End(xlUp).Row mingzi = Cells(i, 1) If Not d.Exists(mingzi) Then d.Add mingzi, '' End IfNext iMsgBox d.Count

对以上代码简单地说明一下。

  • If Not d.Exists(mingzi) Then 如果字典d 中 mingzi 不存在的话,然后就add 对应的mingzi。

  • d.Count 即统计字典中名字的个数。

第二个问题,李四参加了几个科目的考试?这也是我们所说的计数。

代码其实非常简单,首先我们要判断,如果字典d中存在了这个mingzi,那我们在item中对这个mingzi的item值进行累加1即可。

代码稍加修改即可:

Dim d As ObjectDim i As LongDim mingzi As StringSet d = CreateObject('Scripting.Dictionary')For i = 2 To [a65536].End(xlUp).Row  mingzi = Cells(i, 1)  If Not d.Exists(mingzi) Then 	 	d.Add mingzi, 1  Else  	d(mingzi) = d(mingzi) + 1  End IfNext iMsgBox d('张三')MsgBox d('李四')

d(mingzi) = d(mingzi) + 1 实际上就是对Key键对应的Item值进行累加。

接下来第三个问题,求每个人的总分。也就是我们所要说的求和。

其实求和与统计的方法是一样的,只是item赋的值不一样罢了。

代码仍然稍加修改:

Dim d As ObjectDim i As LongDim mingzi As StringDim chenji As IntegerSet d = CreateObject('Scripting.Dictionary')For i = 2 To [a65536].End(xlUp).Rowmingzi = Cells(i, 1)chengji = Cells(i, 3) If Not d.Exists(mingzi) Then d.Add mingzi, chengji Else d(mingzi) = d(mingzi) + chengji End IfNext iMsgBox d('张三')MsgBox d('李四')

我们通过字典的Exists方法,便实现了数据的简单去重,统计和求和的功能。

通过上面的代码,我们能非常清晰地理解各句代码的含义。

但实际上,我们仍可以把代码简化一下,提高代码的运行效率。

Dim d As ObjectDim i As LongDim mingzi As StringDim chenji As IntegerSet d = CreateObject('Scripting.Dictionary')For i = 2 To [a65536].End(xlUp).Rowmingzi = Cells(i, 1)chengji = Cells(i, 3)d(mingzi) = d(mingzi) + chengjiNext iMsgBox d('张三')MsgBox d('李四')

文中代码都是比较简单的应用,后续我们再举较多的例子来讨论字典更多的好的应用。

我始终觉得,字典这个工具,实际应用中,可以做很多的工作,并且相对于数组来说,更好理解。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多