VBA dictionary的用法

1.VBA中创建字典。

dictionary是保存数据键项目对的对象。
下面代码示范如何创建 Dictionary 对象:

Dim myd As Object
Set myd = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     ’添加键和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...

应用举例

实现从A列中提取B列中不存在元素并放在C列

代码如下:

Sub shaixuan()
Dim a, b
a = 1
b = 2
Set dic = CreateObject("scripting.dictionary")
arr = [A1].CurrentRegion
For i = 1 To UBound(arr)
    dic(Cells(i, "A").Value) = ""'把数组第一列作为字典的关键字,对应的项目为空白
    'dic(Cells(i, a).Value) = ""
    'dic(arr(i, a)) = " "
Next i
For j = 1 To UBound(arr)
   If dic.Exists(arr(j, b)) Then'如果数组第二列在字典dic中存在,那么从 Dictionary对象中删除键和项目对。
      dic.Remove (arr(j, b))
   End If
Next j
[c1].Resize(dic.Count, a) = Application.Transpose(dic.keys)'转置显示
End Sub

补充知识:
1.Resize用于调整指定区域的大小,返回代表调整后的区域。
2.Transpose函数的功能是将数组转置,如数组是一维数组,默认数组成一行排列,转置后成为一列
例子:

Sub Transpose转置()
Dim arr(1 To 100)
For i = 1 To 10
    arr(i) = Cells(i, 1)
Next
Range("b1").Resize(UBound(arr)) = Application.Transpose(arr)
End Sub

运行结果:
在这里插入图片描述

运行结果如下图所示:

运行结果

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA 中,Dictionary 对象是无序的,它会根据键的哈希值进行存储和访问。因此,它没有内置的排序功能。但你可以通过一些额外的步骤来实现对 Dictionary 对象的排序。 一种常见的方法是将 Dictionary 对象中的键和值复制到一个数组中,然后对数组进行排序。下面是一个示例代码: ```vba Sub SortDictionary() Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 添加键值对到 Dictionary 对象 dict.Add "C", "C语言" dict.Add "A", "ASP.NET" dict.Add "B", "Basic" ' 将键和值复制到数组 Dim keys() As Variant Dim values() As Variant Dim i As Integer ReDim keys(0 To dict.Count - 1) ReDim values(0 To dict.Count - 1) i = 0 For Each key In dict.keys keys(i) = key values(i) = dict(key) i = i + 1 Next key ' 对键数组进行排序 Call QuickSort(keys, LBound(keys), UBound(keys)) ' 输出排序后的结果 For i = LBound(keys) To UBound(keys) Debug.Print keys(i) & ": " & values(Application.Match(keys(i), keys, 0) - 1) Next i End Sub Sub QuickSort(arr() As Variant, low As Long, high As Long) Dim pivot As Variant Dim i As Long Dim j As Long Dim temp As Variant If low < high Then pivot = arr(low) i = low j = high Do While i < j Do While arr(j) >= pivot And i < j j = j - 1 Loop Do While arr(i) < pivot And i < j i = i + 1 Loop If i < j Then temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Loop temp = arr(low) arr(low) = arr(i) arr(i) = temp Call QuickSort(arr, low, i - 1) Call QuickSort(arr, i + 1, high) End If End Sub ``` 在上面的示例代码中,我们首先创建了一个 Dictionary 对象,并向其中添加了三个键值对。然后,我们将键和值复制到数组中,并使用快速排序算法对键数组进行排序。最后,我们遍历排序后的键数组,并根据键获取对应的值。 请注意,上述示例代码仅针对键进行排序,如果你希望同时对键和值进行排序,可以使用类似的方法进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值