ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 使用 Array 函数创建数组

使用 Array 函数创建数组

作者:绿色风 分类: 时间:2022-08-18 浏览:115
楼主
杨开科
  Array 函数返回一个包含数组的 Variant。
语法 Array(arglist)
  所需的 arglist 参数是一个用逗号隔开的值表,这些值用于给 Variant 所包含的数组的各元素赋值。如果不提供参数,则创建一个长度为 0 的数组。
  用来表示数组元素的符号由变量名、圆括号以及括号中的所需元素的索引号组成。在下面的示例中,第一条语句创建一个 Variant 的变量 A。第二条语句将一个数组赋给变量 A。最后一条语句将该数组的第二个元素的值赋给另一个变量。
  1. Dim A As Variant
  2. A = Array(10,20,30)
  3. B = A(2)
  注意 没有作为数组声明的 Variant 也可以表示数组。除了长度固定的字符串以及用户定义类型之外,Variant 变量可以表示任何类型的数组。尽管一个包含数组的 Variant 和一个元素为 Variant 类型的数组在概念上有所不同,但对数组元素的访问方式是相同的。
  以下示例新建一个工作簿,工作簿中的新工作表数量为4,并将工作表按索引编号依次命名为各个季度。(运行下面3个示例时,请按Ctrl+G打开“立即窗口”,以观察Debug.Print语句的运行情况,在“立即窗口”中,按Ctrl+A,再按Delete可将窗口中的内容全部删除。)
示例1:
  1. Option Explicit '强制显式声明模块中的所有变量
  2. Option Base 1 '将缺省的数组下标设为 1
  3. Sub Worksheet_Index1()
  4.     Dim arr()    '声明数组变量
  5.     Dim i As Byte    'Byte 数据类型范围在 0 至 255 之间
  6.     Application.SheetsInNewWorkbook = 4    '设置 Excel 自动插入到新工作簿中的工作表数目为4
  7.     Workbooks.Add    '新建一个工作簿
  8.     arr = Array("一季度", "二季度", "三季度", "四季度")    '使用 Array 函数创建数组
  9.     Debug.Print LBound(arr)    'LBound 函数返回数组的指定维数的最小可用下标(由于使用了Option Base 1,返回1)
  10.     For i = 1 To 4    '建立一个循环
  11.         Sheets(i).Name = arr(i)
  12.         '第一次循环, i=1,arr(1)="一季度",Sheets(1).Name="一季度"
  13.         '第四次循环, i=4,arr(4)="四季度",Sheets(1).Name="四季度"
  14.     Next
  15.     Application.SheetsInNewWorkbook = 3    '设置 Excel 自动插入到新工作簿中的工作表数目为3
  16. End Sub
  使用 Array 函数或 ParamArray 关键字创建的数组的下界为 0。使用 Array 函数创建的数组的下界受 Option Base 语句指定的下界的决定, 除非 Array 是由类型库(例如 VBA.Array )名称限定。如果是由类型库名称限定,则 Array 不受 Option Base 的影响。
  在上例中,删除Option Base 1,则程序代码必须作出改动,否则,运行到Sheets(i).Name = arr(i),当i=4时会出现“下标越界”的错误(因为模块顶部缺少Option Base 1,数组arr的最小可用下标为0,而非1,最大可用下标为3,而非4)。当然,所有的Debug.Print语句都是可删除的,这里仅是为了便于用户在“立即窗口”中查看程序运行的相关情况(有关详细信息,请参阅)。
示例2:
  1. Option Explicit '强制显式声明模块中的所有变量
  2. '使用 Array 函数或创建的数组的下界为 0
  3. Sub Worksheet_Index2()
  4.     Dim arr()    '声明数组变量
  5.     Dim i As Byte    'Byte 数据类型范围在 0 至 255 之间
  6.     Application.SheetsInNewWorkbook = 4    '设置 Excel 自动插入到新工作簿中的工作表数目为4
  7.     Workbooks.Add    '新建一个工作簿
  8.     arr = Array("一季度", "二季度", "三季度", "四季度")    '使用 Array 函数创建数组
  9.     Debug.Print LBound(arr)    '使用 LBound 函数返回数组的指定维数的最小可用下标,本例返回0
  10.     Debug.Print UBound(arr)    '使用 UBound 函数返回数组的指定维数的最大可用下标,本例返回3
  11.     Debug.Print arr(0)    '在立即窗口输出第一个元素的值(一季度)
  12.     Debug.Print arr(1)    '在立即窗口输出第二个元素的值(二季度)
  13.     Debug.Print arr(2)    '在立即窗口输出第三个元素的值(三季度)
  14.     Debug.Print arr(3)    '在立即窗口输出第四个元素的值(四季度)
  15.     For i = 1 To 4    '建立一个循环
  16.         Sheets(i).Name = arr(i - 1)
  17.         '第一次循环, i=1,arr(i - 1)="一季度",Sheets(1).Name="一季度"
  18.         '第四次循环, i=4,arr(i - 1)="四季度",Sheets(4).Name="四季度"
  19.     Next
  20.     Application.SheetsInNewWorkbook = 3    '设置 Excel 自动插入到新工作簿中的工作表数目为3
  21. End Sub
  注意:arr = Array("一季度", "二季度", "三季度", "四季度") 和arr = VBA.Array("一季度", "二季度", "三季度", "四季度") 的不同。Array 由类型库( 例如VBA.Array )名称限定时,不受 Option Base 的影响。如下例,即使在模块顶部区域声明了Option Base 1,但在Array前面加了类型库名称限定,Debug.Print LBound(arr) 的返回值并不是1,而是0,故应使用Sheets(i).Name = arr(i - 1)。
  示例3:
  1. Option Explicit '强制显式声明模块中的所有变量
  2. Option Base 1 '将缺省的数组下标设为 1
  3. Sub Worksheet_Index3()
  4.     Dim arr()    '声明数组变量
  5.     Dim i As Byte    'Byte 数据类型范围在 0 至 255 之间
  6.     Application.SheetsInNewWorkbook = 4    '设置 Excel 自动插入到新工作簿中的工作表数目为4
  7.     Workbooks.Add    '新建一个工作簿
  8.     arr = VBA.Array("一季度", "二季度", "三季度", "四季度")    ' Array 由类型库( VBA.Array )名称限定
  9.     Debug.Print LBound(arr)    'LBound 函数返回数组的指定维数的最小可用下标(不受Option Base 1的限制,返回0)
  10.     For i = 1 To 4    '建立一个循环
  11.         Sheets(i).Name = arr(i - 1)
  12.     Next
  13.     Application.SheetsInNewWorkbook = 3    '设置 Excel 自动插入到新工作簿中的工作表数目为3
  14. End Sub
Sub Worksheet_Index1()和Sub Worksheet_Index2()不能放在同一模块当中,这是由Option Base语句决定的,Sub Worksheet_Index2()中对4个工作表的命名是通过修改循环变量i,将其修改为i-1的方式实现的,若将它们放在同一模块,则Sub Worksheet_Index2()也受Option Base 1限制,代码运行就会产生错误,而Sub Worksheet_Index3()却可以和Sub Worksheet_Index1()放在同一个模块当中,因为在Sub Worksheet_Index3()中使用了VBA.Array,而非Array。
  示例4:本示例使用 Array 函数创建数组,Range.Resize调整指定区域的大小,Transpose转置数组方向
  1. Sub Add_Tile()
  2.     Dim arr()
  3.     arr = Array("序号", "姓名", "单位", "性别", "出生日期")    '使用 Array 函数创建数组
  4.     Range("A1").Resize(1, 5) = arr    'Resize调整单元格区域为A1:E5,在A1:E5中写入标题
  5.     Range("A1").Resize(5) = Application.Transpose(arr)    'Resize调整单元格区域为A1:A5,'在A1:A5中写入标题,Transpose转置数组方向
  6. End Sub

使用 Array 函数创建数组.rar
2楼
海洋之星
楼主厉害,跟着学习VBA
3楼
bluexuemei
学习,强啊!
4楼
mmice
谢谢分享
5楼
i彳亍
楼主厉害,跟着学习VBA

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap