首先我们先看Collection是用来做什么的?Collection 对象是项目所组成的有序集合,可以把这个集合作为单元来引用。
说明:Collection 对象提供了简便方法,直截了当将一组相关的项目视为单一对象来引用。集合中的项目或成员被这样一个事实联系起来:它们都属于这个集合。集合的成员不一定都是同一种数据类型的。
建立集合的方法与建立其它对象的方法一样。例如:
Dim X As New Collection
一旦建立集合之后,就可以用 Add 方法添加成员,用 Remove 方法删除成员。在用 For Each...Next 语句重复整个集合时,可以用 Item 方法从集合返回特定成员。
Dim s As Collection '定义s变量为集合对象
Set s = New Collection '初始化集合对象s (否则无法使用)
Dim s As New Collection '推荐这句代码,直接初始化,可以不用再Set了,这一句等于上面两句。
范例如下:
'集合s中添加元素的方法
For i = 1 To 10
s.Add i '对于集合s,用Add方法可以加入集合元素
'当然事实上你可以添加任意内容来代替本例中的i
Next
'读取集合中元素的方法
For i = 1 To s.Count '可以用Count属性返回集合中元素总个数
t = s(i) '读取集合s中第i个变量存入临时变量t中
t = s.Item(i) '正规的代码写法应该是这样子(效果一样,推荐用上一句更简明)
Debug.Print s(i) '在立即窗口中观察s(i)的值
Next
'下面是集合s中元素删除的方法
For i = 1 To s.Count '遍历集合元素
s.Remove (1) '每次删去第1个……直至全部删除完毕 或直接简写为: s.Remove 1
' s.Remove (s.Count) '或者每次删除最后一个,直至全部删除完毕(推荐用上一句,不容易错)
' 或简写为 s.Remove s.Count
Debug.Print s.Count '在立即窗口中观察集合s中剩余元素个数
Next
综合应用示例:
对B1:B20区域进行惟一值提取,放到C列中
On Error Resume Next
Dim cell As Range
Dim onlys As New Collection
Dim item As Long
Dim arr
For Each cell In Range("B1:B20")
If cell <> "" Then onlys.Add cell.Value, CStr(cell.Text)
Next
ReDim arr(1 To onlys.Count)
For item = 1 To onlys.Count
arr(item) = onlys(item)
Next
Range("c1:c" & onlys.Count) = Application.Transpose(arr)