昨天的一篇文章,采用了字典的做法。今天开篇讲一下字典的最重要的两个参数key和item。

什么是字典?

VBA中有个Dictionary对象,用于存储数据关键字(Key)和条目(item)对,管着个对象叫做字典

字典存储数据有两个特点:

一是条目(item)与关键字(key)配对存在。(即一一对应)

二是关键字(Key)唯一。(即key没有不能有重复值)

字典的运用主要是基于以上的两点。特别是key的唯一性。

字典如何使用

由于字典不是VBA本生的用法,所以使用字典的话,需要引用。常规有两种方法引用字典。一种是前期绑定,一种是后期绑定。前期绑定,用的比较少,篇幅所限就不展开讲了。就讲一下后期绑定。

sub 后期绑定()

Dim dic

Set dic= CreateObject("Scripting.Dictionary")

End Sub

只要用一个set 上字典的名字 =CreateObject("Scripting.Dictionary")就绑定了字典。

字典的key及item的理解

本篇结合数组详解一下key及item

先看一列,同样复制A1:B8区域的数据,分别用数组与字典的写法。

Excel函数与vba实例(ExcelVBA字典入门key和item)(1)

上述示例中,D,E列的写入是用的数组,H,I列的写入用的是字典。

代码的示例如下:

Sub 字典入门()

Application.ScreenUpdating = False

Dim arr, dic, nRow

Set dic = CreateObject("Scripting.Dictionary")

'把A1到B8的区域的数字,装入数组

arr = Range("a1").CurrentRegion

'把A列的数组装入字典的key

'把B列的数据装入字典的item

nRow = Range("a" & Rows.Count).End(3).Row

For i = 1 To nRow

dic(Cells(i, 1)) = Cells(i, 2)

Next i

'把数组写到D E列

Range("d1").Resize(UBound(arr), UBound(arr, 2)) = arr

'把字典的key与item分别写到H I列

Range("h1").Resize(dic.Count, 1) = Application.WorksheetFunction.Transpose(dic.keys)

Range("I1").Resize(dic.Count, 1) = Application.WorksheetFunction.Transpose(dic.items)

Application.ScreenUpdating = True

End Sub

可以看到。把数据放入数组及从数组里面提出数据,都很方便。

但是把数据装入字典,就不得不借助于For 循环。下面用图例讲解本代码:

Excel函数与vba实例(ExcelVBA字典入门key和item)(2)

Excel函数与vba实例(ExcelVBA字典入门key和item)(3)

无论什么情况下keys与items都只能是一维的数组,如果你按照表格的思维来理解的话,那么dic就只有两列数据一列为key另外与之对应的为items。

Excel函数与vba实例(ExcelVBA字典入门key和item)(4)

注:如图所示的三列数据,B列数据不能作为key因为用重复值。只有A、C列可以作为key。

那么对于三列以上的数据会用到字典嵌套数组了。无论是key还是item都可以嵌套数组。关于字典的去重及套用数组的用法,在后面再讲。

,