网站首页 > 基础教程 正文
之前很多文章都讲过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
猜你喜欢
- 2024-10-12 Java中Array,List,Set,ArrayList,Linkedlist集合的区别
- 2024-10-12 Array与ArrayList的区别 arraylist和arrays
- 2024-10-12 面试官和我聊一聊 ArrayList 面试redis
- 2024-10-12 ArrayList 和 LinkedList 源码分析
- 2024-10-12 Java集合框架,我花60分钟总结,你花20分钟记忆
- 2024-10-12 ArrayList 源码浅析 arraylist源码分析
- 2024-10-12 学点算法(一)——ArrayList内部数组实现元素去重
- 2024-10-12 面试官让我聊聊 ArrayList 解决了数组的哪些问题
- 2024-10-12 秋招啦!朋友,你不会现在连泛型都不清楚吧!不会吧不会吧
- 2024-10-12 每天一道面试题之Arraylist 与 LinkedList 区别
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)