分享

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

 新用户0118F7lQ 2022-06-17 发布于福建
excelperfect

标签: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社群下载本文示例工作簿。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多