预览加载中,请您耐心等待几秒...
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