|
楼主 |
发表于 2014-8-18 20:55
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
实例5 前期绑定的字典实例
一、问题的提出:
有多列多行数据,其中有重复的行,要求编写一段代码,求得不重复的行数据。
如图实例5-1所示。- Sub 保留原数据() ‘by:ldy888
- ‘前期绑定,需先引用c:\windows\system32\scrrun.dll
- Dim d As New Dictionary,t
- For i = 2 To 5
- Set d(Cells(i, 1) & "") = Range(Cells(i, 1), Cells(i, 4))
- Next
- t=d.items
- [A11].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(t))
- End Sub
-
复制代码 三、代码详解
1、Dim d As New Dictionary, t :本段代码需要先引用微软的脚本运行时库Microsoft Scripting Runtime,可在VBE窗口,从菜单-工具-引用,然后勾选Microsoft Scripting Runtime,或者点击浏览,在添加引用对话框中选择c:\windows\system32\scrrun.dll,并打开,确定。完成引用。在本声明语句中把字典d声明为New Dictionary。这就是”前期绑定”了。上面的实例用的是创建对象语句:
Set d = CreateObject("Scripting.Dictionary"),称为”后期绑定”。不需要先引用脚本运行时库。
2、Set d(Cells(i, 1) & "") = Range(Cells(i, 1), Cells(i, 4)) :把单元格对象加入字典,它对应的项是同一行的单元格区域。注意,这里用了Set,和前面的几例不一样哦。如果用Typename(d(Cells(i, 1) & "")),得到的是一个Range对象。这里的Cells(i, 1) & ""也可以用Cells(i, 1).Value来代替。
3、t=d.items :把字典d中存在的所有的关键字对应的项赋给变量t。得到的是一个一维数组,下限为0,上限为d.Count-1。
4、[A11].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(t)) :这句用了两次工作表转置函数Transpose之后赋给A11单元格开始的区域中。没明白两次置换是何目的? |
|