优秀的编程知识分享平台

网站首页 > 技术文章 正文

VBA数组进阶调用.NET ArrayList(vba数组实例)

nanyue 2024-08-12 22:20:55 技术文章 5 ℃

之前很多文章都讲过VBA数组。

但是VBA数组比较鸡肋,功能比较弱,使用起来不是很方便,需要自行封装很多数组方法,这对于新手来说很不友好。

今天给大家讲讲,怎么用.Net自带的ArrayList扩展VBA数组功能。

前言

要在VBA中使用.Net的ArrayList,需要提前导入mscorlib.dll引用。参见下图。本文会分享ArrayList常用的一些方法。

添加元素方法:Add,Insert

Add:用于在元素尾部添加元素

Insert用于在任意位置添加元素

Sub ArrayListExample()
'声明和创建ArrayList对象
Dim MyList As New ArrayList

' 添加值
MyList.Add "Item1"
MyList.Add "Item2"
MyList.Add "Item3"
MyList.Insert 2, "Inseted" ' Insert元素
MyList.Insert 1, "Inseted another" ' Insert元素
For i = 0 To 2
	arr.Add i
Next

'遍历ArrayList
For N = 0 To MyList.Count - 1
    MsgBox MyList(N)
Next

'也可以用For Each遍历ArrayList
For Each I In MyList
    MsgBox I
Next
End Sub

通过下标修改元素

需要注意的是,ArrayList下标,始终从0开始(即便我们通过Option Base 1设置下标从1开始),这点跟VBA内置的数组不一样。

Sub ArrayListExample()
'Create new array list object
Dim MyList As New ArrayList

'Add items to list
MyList.Add "Item1"
MyList.Add "Item2"
MyList.Add "Item3"

'Change item 1 from ‘Item2’ to ‘Changed’
MyList(1) = "Changed"

'Iterate through array list to prove change worked
For Each I In MyList
    'Display item name
    MsgBox I
Next I

End Sub

判断是否包含某个元素:Contains

ArrayList可以用Contains方法,判断是否包含某个元素,返回布尔值。

True:包含,False:不包含。

Sub testArrayList_Contains()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素
    For Each value In Array("hello", "world", "VBA", 1, 3, 5, True, False)
        arr.Add value
    Next
    
    ' 判断是否包含元素
    Debug.Print arr.Contains("VBA") ' True
    Debug.Print arr.Contains("xxx") ' False
End Sub

元素查找:IndexOf和LastIndexOf

IndexOf和LastIndexOf都可以用于查找元素在ArrayList的位置。不同的是,IndexOf用于正向查找,LastIndexOf反向查找(即从最后一个元素开始倒过来查找)。

ArrayList.IndexOf(查找值,从哪个下表开始),如果查找的值不存在,返回-1.

ArrayList.LastIndexOf(查找值)。如果不存在,返回-1.

Sub testArrayList_IndexOf()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素
    For Each value In Array("hello", "world", "VBA", 1, 3, "world", True, False)
        arr.Add value
    Next
    
    ' 查找元素下标。
    ' 返回值的下标始终从0开始
    Debug.Print arr.IndexOf("VBA", 0) ' 2
    Debug.Print arr.IndexOf("xxx", 0) ' -1,查找的值不存在
    Debug.Print arr.LastIndexOf("world") ' 5
End Sub

删除元素:Remove,RemoveAt,RemoveRange

Remove(value):从ArrayList中删除给定的值。只删除第一个找到的元素,有多个也值删除第一个。

RemoveAt(index):从ArrayList中,删除给定下标的值。

RemoveRange(index, count):从ArrayList中,从下标index开始,删除指定个数count的元素。

Sub testArrayList_Remove()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素
    For Each value In Array("hello", "world", "VBA", 1, 1, "world", "hello")
        arr.Add value
    Next
    
    ' 删除元素
    arr.Remove "world"   ' 只删除第一个找到的元素
    arr.RemoveAt 0       ' 删除下标为0的元素
    arr.RemoveRange 0, 2 ' 删除下标从0开始,删除2个元素
End Sub

元素反转:Reverse

顾名思义,将整个ArrayList中元素的顺序反转。


Sub testArrayList_Reverse()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array("a", "work", "life", "balance")
        arr.Add value
    Next
    For Each value In arr
        Debug.Print value  ' 这时候元素的顺序是,a, work, life, balance
    Next
    
    ' 元素顺序反转
    arr.Reverse
    For Each value In arr
        Debug.Print value  ' 这时候元素的顺序发生反转,balance, life, work, a
    Next
End Sub

元素排序:Sort

Sort可以对元素进行升序排序。

Sub testArrayList_Sort()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array(1, 5, 2, 6, 3, 8)
        arr.Add value
    Next
    
    ' 元素升序排序
    arr.Sort
    For Each value In arr
        Debug.Print value
    Next
End Sub

复制:Clone

Clone方法可以浅复制ArrayList。

Sub testArrayList_Clone()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array(1, 5, 2, 6, 3, 8)
        arr.Add value
    Next
    
    ' ArrayList复制
    Set arr2 = arr.Clone
End Sub

获取元素个数:Count

用Count方法,可以获取到ArrayList内元素的个数。

Sub testArrayList_Count()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array(1, 5, 2, 6, 3, 8)
        arr.Add value
    Next
    
    Debug.Print arr.Count ' 6
End Sub

清空所有元素:Clear

Clear方法用于情况ArrayList所有元素。

Sub testArrayList_Clear()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array(1, 5, 2, 6, 3, 8)
        arr.Add value
    Next
    arr.Clear
    
    Debug.Print arr.Count ' 0
End Sub

转换成VBA数组:ToArray

ToArray方法可以把ArrayList转成VBA的数组。

Sub testArrayList_ToArray()
    Dim arr As New ArrayList ' 定义ArrayList
        
    ' 添加元素.
    For Each value In Array(1, 5, 2, 6, 3, 8)
        arr.Add value
    Next
    
    arr2 = arr.ToArray
    For Each value In arr2
        Debug.Print value
    Next
    
End Sub
最近发表
标签列表