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)

    

posted @   你的长颈鹿  阅读(909)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示