示例讲字典(Dictionary):获取唯一值

2022-11-16 10:32:53 浏览数 (1)

标签: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社群下载本文示例工作簿。

0 人点赞