前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >示例讲字典(Dictionary):获取唯一值

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

作者头像
fanjy
发布2022-11-16 10:32:53
4.7K0
发布2022-11-16 10:32:53
举报
文章被收录于专栏:完美Excel完美Excel

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档