VBA字典的使用场景

一、字典的基本概念

(一)什么是VBA字典

字典(dictionary)是一个储存数据的小仓库。共有两列。第一列是key,不允许有重复的元素。第二列是item,每一个key对应一个item,本列允许为重复。

(二)既然有数组,为什么还要学字典?

字典所具有的特征,在很多场景下可用于提速。具体表现在:

  • key所在的列只能装入非重复的元素,利用这个特点可以很方便的提取不重复的值。
  • 每一个key对应一个唯一的item,只要指定key的值,就可以马上返回其对应的item,利用字典可以实现快速的查找。

(三)字典的局限

  • 字典只有两列,如果要处理多列的数据,还需要通过字符串组合和拆分来实现。
  • 字典调用会耗费一定时间,如果数据量不大,字典的优势就无法凸显。

(四)字典在哪里?如何创建字典?

字典由scrrun.dll动态链接库提供的,可以通过前期绑定和后期绑定方式创建字典。

二、字典的使用

(一)装入数据和读取数据

Sub t1()
    Dim d As New Dictionary, arr
    Dim x As Integer
        For x = 2 To 4
            d.Add Cells(x, 1).Value, Cells(x, 2).Value
        Next x
    
    Range("d1").Resize(d.Count) = Application.Transpose(d.Keys)
    Range("e1").Resize(d.Count) = Application.Transpose(d.Items)
End Sub

(二)修改数据和删除数据

Sub t2()
    Dim d As New Dictionary
    Dim x As Integer
    For x = 2 To 4
        d.Add Cells(x, 1).Value, Cells(x, 2).Value
    Next x
    d("张三") = 78
    MsgBox d("张三")
    d.Remove ("李四")
    d.RemoveAll
    MsgBox d.Count
End Sub

(三)区分大小写

Sub t5()
  Dim d As New Dictionary
  Dim x
  d.CompareMode = BinaryCompare
  For x = 1 To 5
    d(Cells(x, 1).Value) = ""
  Next x
  Stop
End Sub

三、字典的场景示例

(一)字典与查找

Sub 多表双向查找()
 Dim d As New Dictionary
 Dim x, y
 Dim arr
 For x = 3 To 5
   arr = Sheets(x).Range("a2").Resize(Sheets(x).Range("a65536").End(xlUp).Row - 1, 2)
   For y = 1 To UBound(arr)
     d(arr(y, 1)) = arr(y, 2)
     d(arr(y, 2)) = arr(y, 1)
   Next y
 Next x
 MsgBox d("C1")
 MsgBox d("吴情")
End Sub

(二)字典与求和

Sub 汇总()
 Dim d As New Dictionary
 Dim arr, x
 arr = Range("a2:b10")
 For x = 1 To UBound(arr)
   d(arr(x, 1)) = d(arr(x, 1)) + arr(x, 2) 'key对应的item的值在原来的基础上加新的
 Next x
 Range("d2").Resize(d.Count) = Application.Transpose(d.Keys)
 Range("e2").Resize(d.Count) = Application.Transpose(d.Items)
End Sub

(三)字典与唯一值

Sub 提取不重复的产品()
 Dim d As New Dictionary
 Dim arr, x
 arr = Range("a2:a12")
 For x = 1 To UBound(arr)
      d(arr(x, 1)) = ""
 Next x
 Range("c2").Resize(d.Count) = Application.Transpose(d.Keys)
End Sub

在此例中提取唯一值只能用数组的修改,如果用数组的add方法,系统会提示存在重复关键字(如下图)。

说明:该文章示例均来源于兰色幻想VBA视频

未经允许不得转载:@He » VBA字典的使用场景

登录

找回密码

注册