楼主 wise |
本人是新手,目前还在学习阶段,数组对我来说,一直都是觉得不怎么掌握。本文整合以前在EP的东西及网上找来的资料,如有侵权,请见谅。 一.初识数组 1. 数组就是一个列表或一组数据表。学习数组的目的,就是为了加速VBA代码的效率。 2. 我们如何运用数组呢? 1)声明数组 2)给数组赋值 3)将数组返回到工作表区域中 3. 调试数组的手段:本地窗口 可以通过设置Stop语句,或F8逐步执行代码,在本地窗口中观测数组的变化。
数组的速度优势是明显的,但不足也很明显,因为数组处理的都是数据,因此,它不能给EXCEL数据添加颜色,删除行列,插入行列等等动作。 5. VBA数组没有内存数组和一般数组之分。在声明数组时,就已经将数组写入内存里。 |
2楼 wise |
二. 声明数组 声明一个数组变量,也是用Dim语句来声明。 (当声明了一个数组,便决定了这个数组用于存储数据所用的内存空间。) Dim arrCnt(10) As Integer Dim arrSheetName(5) As String Dim arr(7) As Variant 1)带括号的数字——这个数组所能存储的最大元素数 2)数组也可以有不同的数据类型,可以是Integer,Long,String,Variant 等等。 注意:上面定义数组的例子是静态数组,即我们在声明数组时,就决定了数组占用内存空间的大小。 |
3楼 wise |
三. 数组的上界和下界 1.默认下界 VBA中,数组默认的下界是0,也就是Option Base 0 如果,我们习惯了用1作为我们的下界,可以强制声明:Option Base 1 注:Option Base 0(1)必须放在所有模块之前,并且对生成数组的函数Array不起作用。 2.自定义上下界 当然,也可以忽略这个强制声明,那就需要在声明数组时,指明数组的上界和下界,如: Dim arrSheetName(1 to 3) as String 表明这个数组的上下界分别是1和3。 注意:上界和下界可以是任意整数,不是一定要从0或1开始,但是上界一定要大于等于下界。 Dim arrSheetName(-1 to 3) as String |
4楼 wise |
四. 一维数组和多维数组 数组可以定义多达60维。 但很少看到多过2维的代码。这也是因为对于Excel的工作表来说,行和列,就是表示2维,处理的数据区域很多都是围绕行和列进行处理。 1. 定义一个二维数组
2. 定义一个三维数组
|
5楼 wise |
五. 静态数组和动态数组 静态数组——知道数组的大小,直接声明,程序运行过程不能改变其大小; 动态数组——事先不知道数组大小,程序运行过程可以改变其大小。 1. 动态数组是可以改变大小的数组,通过在数组名称后附带空括号来声明,如:
2. 在定义动态数组之后,必须使用ReDim来设置动态数组的上界和下界,为数组重新分配存储空间。 3. 使用ReDim语句反复地改变数组的元素个数和维数。
4. ReDim Preserve语句 Preserve 英文的意思是保留,保存。顾名思义,就是重新定义数组时,将数组元素保留在数组中。 与ReDim不同的是,使用了ReDim Preserve,只能通过改变上界,即最末维的大小,来改变数组的大小,且不能改变数组维数。如果改变了下界,就会出现错误信息。 1) 扩充1维数组
2) 扩充2维数组
|
6楼 wise |
六. 释放数组 在某些情况下,我们根据需要来释放数组来重新定义数组,或避免数据堆栈。 Erase语句:重新初始化大小固定的数组元素,以及释放动态数组的存储空间。即,Erase可以删除静态数组和动态数组里的数据元素。
从上面的代码中,我们可以看到,Erase语句用于清除数组元素,对静态数组维数和上标是没有改变的。 而对于动态数组,Erase 语句在释放动态数组所使用的内存后。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。
|
7楼 赵文竹 |
我现在也正在学习数组,老找不到感觉,呵呵,版主的内容真好,跟帖学习了……谢谢!想点击收藏,以便下次查找,为什么看不到收藏按钮呢? |
8楼 DJ_Soo |
好,支持一下小7~ |
9楼 wangqilong1980 |
好,支持一下小7~ |
10楼 coverme |
好,支持一下小7~ |
11楼 mn860429 |
跟着学习,我是真正的新手 |
12楼 老糊涂 |
系统学习数组 |
13楼 keven |
zanyige !!! |