分享

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

 zhangshoupen 2017-10-24

 

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

 

Dim myArray

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

 

等价于:

 

Dim myArray(3)

myArray(0) = '国庆节'

myArray(1) = '中秋节'

myArray(2) = '元旦'

myArray(3) = '春节'

 

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

 

Array函数语法

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

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

其中:

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

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

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

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

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

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

  • Array函数返回的数组是动态数组,其初始大小是Array函数的参数数量,可以使用ReDimReDim 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'))

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

然而,要访问这个数组中的元素,例如第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所示。

 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 = myArray(iCount)

    NextiCount

End With

End Sub

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

 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: 动态数组

 


 

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多