分享

Excel 常见字典用法集锦及代码详解3

 你喜欢那个 2012-02-23

实例1  普通常见的求不重复值问题

一、问题的提出

表格中人员有很多是重复的,要求编写一段代码,把重复的人员姓名以及重复的次数求出来,复制到另一个表格中。

 

 

如图实例11所示。

  实例1-1 

 

 

二、代码

Sub cfz()

Dim i&, Myr&, Arr

Dim d, k, t

Set d = CreateObject("Scripting.Dictionary")

Myr = Sheet1.[a65536].End(xlUp).Row

Arr = Sheet1.Range("a1:g" & Myr)

For i = 2 To UBound(Arr)

    d(Arr(i, 3)) = d(Arr(i, 3)) + 1

Next

k = d.keys

t = d.items

Sheet2.Activate

[a2].Resize(d.Count, 1) = Application.Transpose(k)

[b2].Resize(d.Count, 1) = Application.Transpose(t)

[a1].Resize(1, 2) = Array("姓名", "重复个数")

Set d = Nothing

End Sub

三、代码详解

1Dim i&, Myr&, Arr :变量iMyr声明为长整型变量。
    
也可以写为 Dim Myr As Long Long
    
的类型声明字符为(&)Arr后面没有写明数据类型,默认就是可变型数据类型(Variant)

2Set d = CreateObject("Scripting.Dictionary"):创建字典对象,并把字典对象赋给变量d。这是最常用的一句代码。所谓的“后期绑定”。用了这句代码就不用先引用c:\windows\system32\scrrun.dll了。

3Myr = Sheet1.[a65536].End(xlUp).Row :把表1A列最后一行不为空白的行数赋给变量Myr。这里用了Range对象的End属性,它有4个方向参数,此处的xlUp表示向上,它的值为3,所以也可写成End(3)xlDown表示向下,它的值为4xlToLeft表示向左,它的值为1xlToRight表示向右,它的值为2

4Arr = Sheet1.Range("a1:g" & Myr):把表1A1G列最后一行不为空白的
   
单元格区域的值赋给变量Arr。这样Arr就是个二维数组了,用数组替代单元格引用可对执行代码的速度提高很多很多。

5For i = 2 To UBound(Arr) For…Next循环结构,从2开始到数组的最大上界值之间循环。因为数组的第一行是表头。UboundVBA函数,返回数组的指定维数的最大可用上界。

6d(Arr(i, 3)) = d(Arr(i, 3)) + 1 Arr(i,3)在本例是姓名列,也就是关键字列,举个例子,假如Arr(i,3)=”张三,这句代码的意思就是把关键字张三加入字典,d(key)等于关键字key对应的项,每出现一次这个关键字,它的项的值就增加1。起到了按关键字累加的作用,也正因为有这个作用,所以可使用字典来进行各种汇总统计。后面要讲的实例会充分的展现这个作用。

7k=d.keys :把字典d中存在的所有的关键字赋给变量k。得到的是一个一维数组,下限为0,上限为d.Count-1Keys是字典的方法,前面已经讲过了。

8t=d.items :把字典d中存在的所有的关键字对应的项赋给变量t。得到的也是一个一维数组,下限为0,上限为d.Count-1Items也是字典的方法,前面也已经讲过了。

9Sheet2.Activate :激活表2

10[a2].Resize(d.Count, 1) = Application.Transpose(k) :把字典d中所有的关键字赋给以a2单元格开始的单元格区域中。详细的解释请见前面的keys方法一节。

11[b2].Resize(d.Count, 1) = Application.Transpose(t) :把字典d中所有的关键字对应的项赋给以b2单元格开始的单元格区域中。

12[a1].Resize(1, 2) = Array("姓名", "重复个数") Array是一个VBA函数,返回一个下界为0的一维数组。一维数组是水平排列的,所以赋值给水平的单元格区域不需要用转置函数了。这里作为表头一次性输入。

13Set d = Nothing  :释放字典内存。

 

 

代码执行后如图实例1-2所示。

  实例1-2 

 

 

mWfjYlKO.rar (11.46 KB, 下载次数: 112)


[此贴子已经被作者于2010-10-20 11:31:32编辑过]

oY3uyDXe.rar

194.03 KB, 下载次数: 133

实例1 普通常见的求不重复值问题

Pd06LgGl.rar

228.3 KB, 下载次数: 119

实例1 普通常见的求不重复值问题

drU6eXtb.rar

281.47 KB, 下载次数: 137

实例1 普通常见的求不重复值问题 实例2 求多表的不重复值问题

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多