预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
VBA数组学习笔记
声明数组
数组的声明方式和其它的变量是一样的,它可以使用Dim、Static、Private或Public语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。
数组是否从0或1索引是根据OptionBase语句的设置。如果OptionBase没有指定为1,则数组索引从零开始。
声明固定大小的数组
下面这行代码声明了一个固定大小的数组,它是个11行乘以11列的Integer数组:
DimMyArray(10,10)AsInteger
第一个参数代表的是行;而第二个参数代表的是列。
与其它变量的声明一样,除非指定一个数据类型给数组,否则声明数组中元素的数据类型为Variant。数组中每个数组的数字型Variant元素占用16个字节。每个字符串型Variant元素占用22个字节。为了尽可能使写的代码简洁明了,则要明确声明的数组为某一种数据类型而非Variant。下面的这几行代码比较了几个不同数组的大小:
'整型数组使用22个字节(11元素*2字节)
ReDimMyIntegerArray(10)AsInteger
'双精度数组使用88个字节(11元素*8字节)。
ReDimMyDoubleArray(10)AsDouble
'变体型数组至少使用176字节(11元素*16字节)。
ReDimMyVariantArray(10)
'整型数组使用100*100*2字节(20,000字节)。
ReDimMyIntegerArray(99,99)AsInteger
'双精度数组使用100*100*8字节(80,000字节)。
ReDimMyDoubleArray(99,99)AsDouble
'变体型数组至少使用160,000字节(100*100*16字节)。
ReDimMyVariantArray(99,99)
数组变量的最大值,是以的操作系统与有多少可用内存为基础。若使用的数组大小超过了系统中可用内存总数的话,则速度会变慢,因为必须从磁盘中读写回数据。
声明动态数组
若声明为动态数组,则可以在执行代码时去改变数组大小。可以利用Static、Dim、Private或Public语句来声明数组,并使括号内为为空,如下示例所示。
DimsngArray()AsSingle
注意可以在过程中使用ReDim语句来做隐含性的数组声明。当使用ReDim语句时要小心点,不要拼错数组的名称。否则即使在模块中有包含OptionExplicit语句,仍然会因此而生成第二个数组。
对于过程中的数组范围,可以使用ReDim语句去改变它的维数,去定义元素的数目以及每个维数的底层绑定。每当需要时,可以使用ReDim语句去更改动态数组。然而当做这个动作时,数组中存在的值会丢失。若要保存数组中原先的值,则可以使用ReDimPreserve语句来扩充数组。例如,下列的语句将varArray数组扩充了10个元素,而原本数组中的当前值并没有消失掉。
ReDimPreservevarArray(UBound(varArray)+10)
注意当对动态数组使用Preserve关键字时,只可以改变最后维数的上层绑定,而不能改变维数的数目。
常常在论坛看到很多VBA高手运用数组解决各种问题,速度快,代码简洁,很是羡慕,所以逐渐收集了一些资料,与大家分享,也请多多指教。在此,也向高手们致以谢意。
一、数组的分类
按元素数目分:元素数目大小固定的数组和元素数目大小不固定的动态数组。
按维数分:一维数组、多维数组。
Arr(1to12)、Arr1(0to24)----一维固定数组;
Arr2(1to5,1to8)----二维固定数组;
Arr3(5to10,6to12,1to100)----三维固定数组。
动态数组
DimArr2(),r%
r=r+1
ReDimPreserveArr2(1Tor)―――动态数组;可以重新声明(只有最后一维的数目才能重新声明);
用了关键字Preserve可确保原来包含数据的数组中的任何数据都不会丢失
二、数组的赋值
2.1,单元格区域保存到数组
arr=[e22:i24]
arr=Range(“e22:i24”)
2.2,Array函数
myArray=Array("AAA","BBB",200,500,"2006-7-12")
如果代码头没有OptionBase1的语句,则数组myArray的上限为4,下限为0。
即下限LBound(myArr)=0,上限UBound(myArr)=4
二维数组的第一维的上限:UBound(Arr,1