VBA进阶 | 数组基础06: 与数组相关的函数——Array函数与IsArray

微信公众号:excelperfect

 

在某些情形下,可以使用Array函数方便地填充数组。例如,下面的代码:

 

Dim myArray

myArray =Array("国庆节", "中秋节", "元旦", "春节")

 

等价于:

 

Dim myArray(3)

myArray(0) = "国庆节"

myArray(1) = "中秋节"

myArray(2) = "元旦"

myArray(3) = "春节"

 

因此,Array函数可以将一组值批量赋给一个数组。

 

Array函数语法

Array函数返回一个Variant型数组,该数组由传递给该函数的参数组成。其语法为:

Array([元素1],[元素2],…,[元素n])

其中:

  • 元素1~n可以是任意数据类型,代表赋给数组元素的数据。

  • 由Array函数返回的数组只可赋值给一个Variant型变量,不能赋值给已声明为数组变量的变量。

  • Array函数返回的数组中元素的顺序与传递给函数的参数值的顺序相同。

  • Array函数总是返回Variant类型的数组,但元素的数据类型可以不同,这取决于传递给该函数的数值类型。例如Array("One", 2, 3.14)返回的数组中,第1个元素是String型,第2个是Integer型,第3个是Double型。

  • Array函数创建的数组下限由Option Base确定。若忽略该语句,则数组下限值为0。

  • 若Array函数没有任何参数,则会创建一个空数组。

  • Array函数返回的数组是动态数组,其初始大小是Array函数的参数数量,可以使用ReDim、ReDim Preserve来对所创建的数组重新定义维数。

  • 如果使用VBA.Array(),例如

  • Dim myArray As Variant

    myArray = VBA.Array(“国庆节”,”中秋节”,”元旦”)

    那么数组的基数总是0,与Option Base的设置无关。即Option Base 1时,myArray(1)的值仍然是“中秋节”。

     

    编程技巧

    1. 在已确定元素内容时,使用Array函数更有效率。例如:

    Dim myArray AsVariant

    myArray =Array("国庆节", "中秋节", "元旦", "春节")

     

    2. 可以使用Array函数创建多维数组,例如:

    Dim myArray AsVariant

       

    myArray =Array(Array("One", "Two", "Three"), _

                      Array("Four","Five", "Six"), _

                      Array("Seven","Eight", "Nine"))

    创建了一个3行3列的二维数组。

    然而,要访问这个数组中的元素,例如第2行第3列的元素数据“Six”,不能够使用:

    myArray(1, 2)

    这样,将产生“下标越界”错误。

    而应该使用:

    myArray(1)(2)

    或者,先声明一个Variant型变量,然后将相应行的第1维赋值给该变量,再使用该变量来访问相应列的元素数据,例如:

    Dim vElement AsVariant

    vElement =myArray(1)

       

    MsgBox vElement(2)

     

    3. 可以使用Array函数来为ActiveX 列表框或组合框控件赋值,例如:

    Me.ListBox1.List =Array("国庆节", "中秋节", "元旦", "春节")

    给列表框添加了4个节日名。

     

    4. 可以使用Array函数创建控件数组,即将控件名称作为Array函数的参数。然后,可以将数组元素当作相应的控件对象来使用,例如:

    Private SubCommandButton1_Click()

        Me.ListBox1.Clear

        Me.ListBox1.List = Array("国庆节", "中秋节", "元旦", "春节")

        Me.ListBox1.ListIndex = 0

    End Sub

     

    Private SubCommandButton2_Click()

        Dim myArray As Variant

        myArray = Array(ListBox1, CommandButton1)

        MsgBox myArray(0).Text

    End Sub

    运行后的结果如下图1所示。

    VBA进阶 | 数组基础06: 与数组相关的函数——Array函数与IsArray
     图1

     

    示例

    示例1使用Array函数创建数组

    Sub TestArray()

        Dim myArray() As Variant

     

        "从逗号分隔的字符串列表中创建数组

        myArray = Array("One","Two", "Three")

        "显示数组元素

        MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)

        "也可以使用数值作为参数

        myArray = Array(10, 20, 30)

        "显示数组元素

        MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)

    End Sub

     

    示例2:下面的示例先使用Array函数将一组值赋给变量myArray,然后将该变量中的值输入到工作表Sheet1的第1行。

    Option Base 1

    Sub ArrayTest()

    Dim myArray As Variant

    Dim iCount As Integer

     

    myArray = Array("姓名",”性别”,”成绩”)

     

    With Worksheets(“Sheet1”)

        ForiCount = 1 To UBound(myArray)

           .Cells(1,iCount).Value = http://www.gunmi.cn/v/myArray(iCount)

        NextiCount

    End With

    End Sub

    运行代码后的结果如图2所示。

    VBA进阶 | 数组基础06: 与数组相关的函数——Array函数与IsArray
     图2

      

    在某些情形下,需要检验某个变量是否为数组,以便于后续操作,此时,可以使用IsArray函数。

     

    IsArray函数语法

    IsArray函数返回一个Boolean值,表明传递给该函数的变量是否为数组。其语法为:

    IsArray(varname)

    其中:

  • 参数varname为等检验是否为数组的变量的名称。

  • 如果传递给IsArray函数的变量是一个数组或者包含一个数组,则返回值为True;否则为False。

  •  

    编程技巧

    在不确定使用的变量是否为数组时,如果试图访问不存在的数组中的元素或者对其使用数组函数(如LBound或者UBound),就会导致错误。此时,可以先使用IsArray函数来确定其是否为数组,然后再进行后续相应的操作。

    例如,下面的代码段检查变量myArray是否为数组,若不是则退出:

    If NotIsArray(myArray) Then Exit Sub

     

     

    相关链接:

    VBA进阶 | 数组基础01: 用最浅显的介绍来帮助你认识数组

    VBA进阶 | 数组基础02: 简单的数组操作

    VBA进阶 | 数组基础03: 二维数组

    VBA进阶 | 数组基础04: 运用数组处理工作表数据

    VBA进阶 | 数组基础05: 动态数组

     

     

    本文属原创文章,转载请注明出处。

    欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    欢迎关注[完美Excel]微信公众号:

    方法1—在微信“添加朋友”或者通讯录中搜索“完美Excel”或者“excelperfect”后点击关注。

    方法2—扫一扫下面的二维码

    VBA进阶 | 数组基础06: 与数组相关的函数——Array函数与IsArray

    别忘了,留言、点赞、点击每篇文章底部的广告,也是给我的支持和鼓励哟!VBA进阶 | 数组基础06: 与数组相关的函数——Array函数与IsArray