VBA - 按属性过滤用户定义类的集合字典的最有效方法

作者:编程家 分类: vba 时间:2025-08-24

使用VBA编程语言时,我们经常需要处理集合或字典对象。这些对象通常包含多个元素,我们需要根据特定的属性对它们进行过滤。在本文中,我们将探讨在VBA中按属性过滤用户定义类的集合或字典的最有效方法。

案例代码:

让我们假设我们有一个用户定义的类叫做"Person",它有两个属性:姓名和年龄。我们创建一个集合对象,其中包含多个Person对象。我们的目标是根据年龄属性对这些Person对象进行过滤。

vba

' 声明Person类

Public Class Person

Public Name As String

Public Age As Integer

End Class

' 创建Person对象并添加到集合中

Dim people As New Collection

Dim person1 As New Person

person1.Name = "John"

person1.Age = 25

people.Add person1

Dim person2 As New Person

person2.Name = "Amy"

person2.Age = 30

people.Add person2

Dim person3 As New Person

person3.Name = "Tom"

person3.Age = 28

people.Add person3

' 根据年龄属性过滤Person对象

Dim filteredPeople As New Collection

For Each p In people

If p.Age >= 30 Then

filteredPeople.Add p

End If

Next p

' 输出过滤后的结果

For Each fp In filteredPeople

Debug.Print fp.Name & " - " & fp.Age

Next fp

以上代码演示了如何创建一个Person类的集合,并根据年龄属性将其过滤为一个新的集合。在这个例子中,我们过滤出年龄大于等于30岁的Person对象,并输出它们的姓名和年龄。

使用字典对象进行属性过滤

除了使用集合对象,我们还可以使用字典对象进行属性过滤。字典对象提供了一种更快速和高效的方式来查找和访问元素。

vba

' 创建Person对象并添加到字典中

Dim people As New Dictionary

Dim person1 As New Person

person1.Name = "John"

person1.Age = 25

people.Add "person1", person1

Dim person2 As New Person

person2.Name = "Amy"

person2.Age = 30

people.Add "person2", person2

Dim person3 As New Person

person3.Name = "Tom"

person3.Age = 28

people.Add "person3", person3

' 根据年龄属性过滤Person对象

Dim filteredPeople As New Dictionary

For Each key In people.Keys

If people(key).Age >= 30 Then

filteredPeople.Add key, people(key)

End If

Next key

' 输出过滤后的结果

For Each key In filteredPeople.Keys

Debug.Print filteredPeople(key).Name & " - " & filteredPeople(key).Age

Next key

以上代码演示了如何使用字典对象进行属性过滤。与集合对象相比,字典对象提供了更快速和高效的访问方式。在这个例子中,我们过滤出年龄大于等于30岁的Person对象,并输出它们的姓名和年龄。

在VBA中,按属性过滤用户定义类的集合或字典有多种方法。我们可以使用集合对象或字典对象,根据特定的属性对元素进行过滤。集合对象提供了一种简单的方式来处理集合,而字典对象则提供了更快速和高效的访问方式。根据实际情况选择合适的方法,可以提高程序的性能和效率。