玖叶教程网

前端编程开发入门

利用数组作为字典键值,实现数据快速排重及快速回填

大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第40讲,利用数组作为字典的键值,一方面实现快速排重,一方面实现数据快速回填。在上面的几讲中,我们看到字典作为VBA应用的一部分,在排重,汇总求和方面有着独步天下的作用,我在以后的讲解中会逐步深入的讲解,今日讲解的是利用键值作为数组,实现多列数据的快速排重和回填。

我们先看下面的数据:在三列数据中,我要实现按A列数据的排重,同时要把排重后的数据回填到工作表中。

我们知道,对于字典而言是一个键和键值的匹配关系,那么如何实现上述的逻辑过程呢?我们看我给出的代码:

Sub mynzsz_40() '第40讲 利用数组作为键值,一方面实现快速排重,一方面实现数据回填的迅速

Dim myarr, myDic As Object

'将数据放入数组

myarr = Sheets("40").[a1].CurrentRegion

Set myDic = CreateObject("scripting.dictionary")

For i = 1 To UBound(myarr)

myDic(myarr(i, 1)) = "" '初始化字典

Next i

'将数据赋值入字典

For i = 1 To UBound(myarr)

If myDic.exists(myarr(i, 1)) Then myDic(myarr(i, 1)) = Array(myarr(i, 1), myarr(i, 2), myarr(i, 3))

Next i

'清空工作表区域

Sheets("40").[e:g].Cells.Clear

'将字典数据回填到工作表

Sheets("40").[e1].Resize(myDic.Count, 3) = Application.Transpose(Application.Transpose(myDic.items))

End Sub

代码截图:

代码的讲解:

1 上述语句实现了将源数据按A列进行排重处理,排重后的数据回填到工作表中。

2 myarr = Sheets("40").[a1].CurrentRegion

上述语句将A1单元格区域的数据填入数组

3 Set myDic = CreateObject("scripting.dictionary")

创建字典,要在注意的是要用到SET

4 For i = 1 To UBound(myarr)

myDic(myarr(i, 1)) = "" '初始化字典

Next i

上述语句中,我给出的解释是初始化字典,在一些语言中初始化是很重要的概念,在VBA中确实没有引入这个概念,但要知道,初始化是对数据变量的应用是一个重要的环节,在上述初始化的过程中,代码完成了字典的对键的分配,并赋值为空,这个时候就确定了键的数量了。

5 For i = 1 To UBound(myarr)

If myDic.exists(myarr(i, 1)) Then myDic(myarr(i, 1)) = Array(myarr(i, 1), myarr(i, 2), myarr(i, 3))

Next i

给键赋值,这个时候我们只要给键赋值即可,需要注意的是,赋的值是数组Array(),也就是说,键值可以为数组。这里的数组是一个一维的数组。

6 Sheets("40").[e1].Resize(myDic.Count, 3) = Application.Transpose(Application.Transpose(myDic.items))

上述代码将数据回填到工作表中,这里用了一个两次的转置实现的这个目的,大家要留意。

下面看代码的运行:

今日内容回向?

1 字典的键可以为数组吗?键值可以为数组吗?

2 如何理解字典的初始化,其意义是什么?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言