VBA(二)数组学习
-
一维数组
Sub test() '创建一维数组 Dim arr As Variant arr = Array("a", "b", "c", "d") MsgBox arr(1) '弹出 b End Sub Sub test2() '创建一维数组 Dim arr(3) As Variant '或定义arr(0 To 3),从0开始,共四个元素 arr(0) = "a" arr(1) = "b" arr(2) = "c" arr(3) = "d" MsgBox arr(1) '弹出 b End Sub
*** 一维数组映射到excel单元格上的位置
-
二维数组
Sub test3() '创建二维数组 Dim arr(1 To 3, 1 To 3) arr(1, 1) = "a1" arr(1, 2) = "b1" arr(1, 3) = "c1" arr(2, 1) = "a2" arr(2, 2) = "b2" arr(2, 3) = "c2" arr(3, 1) = "a3" arr(3, 2) = "b3" arr(3, 3) = "c3" '这里可以用for循环装入值 MsgBox arr(3, 3) '弹出 c3 End Sub Sub test4() '单元格创建数组 Dim arr() As Variant arr() = Range("A1:C3") '类似 a(1 to 3, 1 to 3) MsgBox arr(3, 3) '弹出 c3 End Sub
*** 二维数组映射到excel单元格上的位置
-
动态数组
Dim定义了数组的长度后就不能改变了(动态数组会先Dim一个空的数组如:Dim arr() as variant )。不能改变长度的数组,易出现浪费或不足的现象。动态数组的出现解决了这一问题;
ReDim:可以更新数组的长度,但清空原数组的数据;
ReDim PreServe:可以更新数组的长度,且保留原数组的数据;
一维动态数组
Sub test5() '动态数组(保留) Dim arr() As Byte Dim i As Integer For i = 1 To 3 Step 1 ReDim Preserve arr(i) arr(i) = i Next MsgBox arr(3) End Sub
Sub test6() '动态数组(清空) Dim arr() As Byte Dim i As Integer For i = 1 To 3 Step 1 ReDim arr(i) arr(i) = i Next MsgBox arr(2) End Sub
二维动态数组
二维动态数组只有最后一维的长度是可以变化的
Sub test7() '二维动态数组 Dim arr() As Variant Dim i As Integer For i = 1 To 3 Step 1 ReDim Preserve arr(1 To 1, 1 To i) arr(1, i) = i Next MsgBox arr(1, 3) End Sub
-
数组的几种方法
数组转置Transpose(arr)
数组写入函数的方式即行列的转换
Sub test8() '一维数组转置 Dim arr(1 To 3) As String arr(1) = "a" arr(2) = "b" arr(3) = "c" Range("A1:A3") = Application.Transpose(arr) End Sub
结果如下:
*** 数组数据溢出单元格时,在数组长度范围内的会自动填充数据同一维数据,超出数组长度的填充报错;
Sub test9() '二维数组转置 Dim arr(1 To 3, 1 To 3) arr(1, 1) = "a1" arr(1, 2) = "b1" arr(1, 3) = "c1" arr(2, 1) = "a2" arr(2, 2) = "b2" arr(2, 3) = "c2" arr(3, 1) = "a3" arr(3, 2) = "b3" arr(3, 3) = "c3" Range("A1:C3") = Application.Transpose(arr) End Sub
结果如下:
*** 数组数据溢出单元格,填充报错;
获取数组的长度
获取一维数组的下标:LBound(arr,1)
获取一维数组的上标:UBound(arr,1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具