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所示。
图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所示。
图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—扫一扫下面的二维码
别忘了,留言、点赞、点击每篇文章底部的广告,也是给我的支持和鼓励哟!
- 亲历三年V峰会,看微博的平台化进阶
- 免费赠书 | 评论区留言就送《Android进阶之光》
- 托福预备进阶班
- Java程序员编程的10个正确姿势
- 线上公开课 Vol.5 | 小白进阶之路
- 平台型产品经理如何突破进阶中级瓶颈?
- 福利放送! 价值4000元的A-Level进阶数学系列公开课不要错过!名
- 进阶AI工程师 不只有理论知识 你还要掌握这些方法和工具
- ArrayList 底层数组扩容原理
- 从0到1:十五天完成达芬奇影视调色的进阶之路