学习Excel技术,关注微信公众号:
excelperfect
运用集合,我们可以更高效地完成一些任务。例如,集合的特点就是可以把很多值存储在一个集合中,而不需要使用多个变量来存储这些值。
下图1所示为存储学生分数的工作表,如果使用变量来存储学生的姓名和分数,那会使用很多的变量。
图1
我们可以使用集合来方便地存储这些数据。下面的代码将学生姓名作为集合元素的键,将相应的成绩作为元素的值:
'声明并创建集合
Dim colStudents As New Collection
'声明其他变量
Dim lngLast As Long
Dim rng As Range
'找到工作表中最后一行
lngLast =Worksheets("Sheet1").Range("A" &Rows.Count).End(xlUp).Row
'遍历数据
'将学生姓名作为键
'将学生分数作为值
For Each rng In Worksheets("Sheet1").Range("A2:A" & lngLast)
colStudents.Add _
Item:=rng.Offset(0, 1).Value, _
Key:=rng.Value
Next rng
这样,想要查找某名学生的分数,直接使用代码:
colStudents("韩梅梅")
不必使用循环来一个个查找,非常方便!
可以声明参数为集合并将其传递给过程或数。例如下面的MyPro过程中,将集合传递给YourPro过程:
Sub MyPro()
'声明并创建集合
Dim colMy As New Collection
'添加元素
colMy.Add "完美Excel"
colMy.Add "excelperfect"
'传递给过程
YourPro colMy
End Sub
'接受集合参数
Sub YourPro(ByRef colYou AsCollection)
Dim item As Variant
For Each item In colYou
Debug.Print item
Next item
End Sub
注意到,在被调用过程YourPro中的参数colYou为ByRef,即传递引用,这意味着在被调过程中对集合的更改,在主调过程中该集合将会同时被修改。
还可以从自定义函数中返回集合,如下面的示例代码:
Sub Main()
'声明集合变量
Dim colTest As Collection
Dim item As Variant
'将函数过程中返回值赋给变量
Set colTest = MyCollection
'输出集合元素
For Each item In colTest
Debug.Print item
Next item
End Sub
Function MyCollection() As Collection
'声明并创建集合
Dim colMy As New Collection
'添加元素
colMy.Add "完美Excel"
colMy.Add "excelperfect"
'返回集合
Set MyCollection = colMy
End Function
运行过程Main的结果如下图2所示。
图2