但是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 2arr.Add iNext'遍历ArrayListFor N = 0 To MyList.Count - 1 MsgBox MyList(N)Next'也可以用For Each遍历ArrayListFor Each I In MyList MsgBox INextEnd Sub
通过下标修正元素
须要把稳的是,ArrayList下标,始终从0开始(即便我们通过Option Base 1设置下标从1开始),这点跟VBA内置的数组不一样。
Sub ArrayListExample()'Create new array list objectDim MyList As New ArrayList'Add items to listMyList.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 workedFor Each I In MyList 'Display item name MsgBox INext IEnd 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") ' FalseEnd 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") ' 5End 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 NextEnd 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 NextEnd 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.CloneEnd 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 ' 6End 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 ' 0End 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