第三章 字典
3.4 去除重複項與分類彙總
由于字典的鍵具有唯一性,所以字典在去除重複項方面具有巨大的優勢,且代碼簡潔,使用靈活。
在上一節《字典的屬性》我們已經講過,利用字典與數組搭配,很方便快捷的就把重複項去除了。
把需要去除重複項的内容讀入數組:
arr = Range("a1:a100")
arr = Application.Transpose(arr)
然後利用字典的Item簡化版屬性,用For循環語句就會生成一個去除掉重複項的字典了:
For i = 1 To UBound(arr)
d(arr(i)) = ""
Next
利用字典的“鍵-值”對,以要統計的對象作為鍵,把要彙總的數值作為條目,就可以很輕松的實現分類彙總了。
小程序:
彙總各班級的成績
班級 |
成績 |
一班 |
15 |
一班 |
20 |
一班 |
35 |
二班 |
44 |
二班 |
28 |
二班 |
37 |
三班 |
66 |
三班 |
18 |
三班 |
99 |
四班 |
88 |
四班 |
89 |
四班 |
90 |
五班 |
91 |
五班 |
92 |
五班 |
93 |
六班 |
94 |
六班 |
95 |
六班 |
98 |
Sub 分類彙總()
Dim d As New Dictionary
arr = Range("a1").CurrentRegion
For i = 1 To UBound(arr)
d(arr(i, 1)) = d(arr(i, 1)) arr(i, 2)
Next
h = d.Count
Range("d1", Cells(h, "d")) = Application.Transpose(d.Keys)
Range("e1", Cells(h, "e")) = Application.Transpose(d.Items)
MsgBox "分類彙總成功!"
End Sub
在這個程序裡,首先把數據讀到arr數組裡,形成如下圖所示的數組:
我們還是利用了字典的Item簡化版屬性,用arr(i, 1)作為班級鍵值,arr(i, 2)作為待統計的數據。班級鍵值沒有寫入字典的,新增該班級鍵值和它對應的分數;班級鍵值已經存在的,則把循環到的分數累加到原來的條目上。最後把結果輸出到D、E列。程序運行結果如下:
同樣的,利用字典的“鍵-值”對,以要比較的對象作為鍵,把要比較的數值作為條目,就可以很輕松的實現取得每個對象的最大值、最小值了。
還是以上圖為例,獲取每個班級的最低分。
Sub 獲取最小值()
Dim d As New Dictionary
arr = Range("a1").CurrentRegion
For i = 1 To UBound(arr)
If d.Exists(arr(i, 1)) Then
If d(arr(i, 1)) > arr(i, 2) Then
d(arr(i, 1)) = arr(i, 2)
End If
Else
d.Add arr(i, 1), arr(i, 2)
End If
Next i
MsgBox Join(d.Keys)
MsgBox Join(d.Items)
End Sub
同樣是利用了字典的Item簡化版屬性,隻是多利用了字典的Exists屬性,增加了一條判斷班級鍵值是否在字典裡存在的判斷語句,因為字典的Item簡化版屬性會自動增加鍵值,但自動增加的對應條目為空,如果不用Add語句設置對應條目的第一個數值,會導緻判斷錯誤,最後得出的最小值全部為空。對班級鍵值對應的條目與循環到的數字相比較,留下最小值,最後把得到的結果用消息框彈出顯示。
往期精彩回顧:
學習VBA,報表做到飛 第三章 字典 3.3 字典的屬性
學習VBA,報表做到飛 第三章 字典 3.2 字典的方法
學習VBA,報表做到飛 第三章 字典 3.1 字典的引用
我是雲飛揚,職場财會人員,願與大家分享表格制作和數據統計分析的技巧與方法,希望大家的工作更便捷,更輕松!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!