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

数组学习笔记

作者:绿色风 分类: 时间:2022-08-18 浏览:120
楼主
houtian23
本人是新手,刚开始学习数组不久,有些还有了解透,如有错误高手轻拍啊
学习他的目的主要是看中它运行速度快,而且不用对单元格操作,可以避免破坏单元格的数据
1、数组的好处和坏处
A、数组是存在内存中的,读写速度比单元格快,这个理解为数组是电脑的内存,单元格是电脑的硬盘,内存的读取速度比硬盘快很多的
B、数组不用对单元格进行操作,这样可以避免破坏单元格的数据
C、数组的坏处就在于excel关闭后数据就会消失,单元格则不会,如果需要保存数据则需要将数组写入单元格,这个跟电脑的内存和硬盘一个道理。
2、数组的声明
数组声明跟变量声明一样,都是用dim语句,不同的是数组变量是用括号的
Dim Arr()
Dim Arr() as long
dim Arr(1 to 100,1 to 10)
dim arr(10)
以上是常见的数组声明方式,前面两个是动态数组,使用之前需要用redim来声明数组元素的个数及维度,语法是redim Arr(1 to x),一个动态数组可以N次用redim语句,每次需要时便可用redim改变数组大小,需要注意的是redim重置数组后会清空数组的值,如果需要可以用preserve保留数组的值,如 redim preserve Arr(1 to y)便可以将数组的值保留下来。但注意preserve只能重置最后一维的大小,数组Arr(1 to 10,1 to 10) 使用redim preserve,只能是redim preserve arr(1 to 10,1 to y),否则会返回下标越界的错误。
数组声明时可以指定数据类型,如果数组元素是包含多种数据类型,特别是将单元格数值赋予数组的时候,注意不要指定数据类型,否则会返回类型不匹配的错误,例如单元格数据包含文本、数值的但数组声明数据类型为byte,赋值就会出错。
后边两个是静态数组,声明时就指定了维数及大小,不可以使用redim preserve语句重置,此时会返回数组维数已定义的错误
3、数组的上界与下界
A、数组默认下界是0,如dim arr(10)的下界是0,上界是9,可以用Option Base 1语句强制数据下界为1,必须放在所有模块之前,注意Option Base后边只能是1或者0
B、可以声明数组或者重置数组是指定数组上下界,如dim Arr(1 to 100 )就是个下界为1上界为100的一位数组,注意数组上界必须大于下界,而且下界不一定是1,例如dim Arr(-10 to 100 ),dim Arr(10 to 100 )。
4、数组的维度
A、VBA数组的维度最大可以是60维,arr(7)是一个一位数组,arr(1 to10 ,1 to 9)是个二维数组,arr(1 to 10 ,1 t0 11 ,1
to 12)是三维数组,维度之间用逗号分隔
B、日常用的最多的是二维数组,因为表格是由行与列组成的,需要注意的是VBA的数组总是横向的(因为数组元素之间用逗号分隔),因此如果向一列写入数组必须要transpose转置;将单元格区域赋值给数组,总是二维数组,即使该区域是一列或者一行
5、数组的赋值
A、循环赋值
  1. Sub test()
  2. Dim arr(1 To 10)
  3. Dim i As Integer
  4. For i = 1 To 10
  5.     arr(i) = i
  6. Next
  7. Stop

  8. End Sub
B、将单元格数据写入数组
  1. Sub test2()
  2. Dim arr()
  3. arr = Sheet1.Range("A1:B14").Value
  4. Stop
  5. End Sub
注意单元格赋值给数组必须将数组声明为动态数组,否则不能赋值
6、取出数组元素
每个数组元素都有一个索引号,一维数组就是arr(i),二维数组就是arr(i,j),三维数组就是arr(i,j,x),以此类推,因此可以通过循环变量来取出符合要求的元素
例子:将数组中大于5的元素取出来
  1. Sub test()
  2. Dim arr()
  3. Dim i As Integer
  4. arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  5. For i = 0 To 9
  6.     If arr(i) > 5 Then
  7.         MsgBox arr(i)
  8.     End If
  9. Next

  10. Stop

  11. End Sub
2楼
houtian23
占楼编辑
3楼
houtian23
占楼编辑
4楼
mmice
没更新啦

免责声明

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

评论列表
sitemap