标签:VBA,Dictionary
字典(Dictionary)是一种通过键(key)和项(item)(注:键和项是字典中的术语)存储唯一项的方法。它是一种基于唯一键存储数据的极好工具,它的强大之处在于可以使用键来存储和合并数据。
在本文中,讲解如何在字典中捕获一个单元格区域并将其引用回Excel。这里,将存储一个10行的单元格区域,然后只输出该区域中唯一的项目。
示例如下图1所示。获取其数据区域,使用字典将数据存储,然后使用VBA数组提取我们选择需要获取唯一值的列。
图1
设置字典非常简单:可以直接创建字典对象,而无需引用Microsoft Scripting Runtime。下面的代码创建字典引用:
With CreateObject("Scripting.Dictionary")
另一种方式是,在VBE中单击“工具-引用”命令,在“引用”对话框中,勾选“Microsoft Scripting Runtime”前的复选框,如下图2所示。
图2
下面的VBA代码从数据单元格区域中生成唯一数据。它将从数组的当前区域获取数据,并将数据汇总到一个唯一值列表中,输出到所选择的单元格区域内。
Sub ScriptA()
Dim ar
Dim i As Long
Dim k As Variant
ar = [A1].CurrentRegion.Value
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(ar)
.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 3)
Next
For Each k In .keys
Debug.Print k, .Item(k)
Next k
ar = Array(.keys, .items)
Sheet3.[A1].Resize(.Count, 2) = Application.Transpose(ar)
End With
End Sub
将单元格区域推送到一个名为(ar)的数组中,该数组存储所有数据。然后,一个简单的For循环遍历数组中的数据。
.Item行允许引用数组(ar),并将唯一数据放入字典中。
.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 3)
当循环完成后,所要做的就是将数据从字典中提取到想要的位置。
使用以下代码将数据返回数组:
ar = Array(.keys, .items)
也可以只使用: ar = Array(.keys)
仅引用一列。
最后,将输出数据的单元格区域调整为与保存字典的数组相同的大小。
Sheet3.[A1].Resize(.Count, 2) = Application.Transpose(ar)
这里将数据输出工作表Sheet3的单元格A1,并从该起始点调整区域大小。
图3
如果想要输出不同列的唯一值,可以使用代码。例如,将第1列:
.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 3)
修改为第2列:
.Item(ar(i, 2)) = .Item(ar(i, 2)) + ar(i, 3)
此时得到第2列的唯一值如下图4所示。
图4
注:本文学习整理自thesmallman.com,有兴趣的朋友可以到原网站学习。或者到知识星球App完美Excel社群下载本文示例工作簿。