资源描述:
《关于某EXCEL中VBA地数组理解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用文档关于EXCEL中VBA的数组理解 一、什么是VBA数组不要把VBA数组想的太神秘,它其实就是一组数字而已。把一组数按行、列排在一起,放在内存中。就是一个VBA数组。二、数组的维数数组的维数其实和文件管理的目录一样的,只有一层时就是一维。如果有两层则是二维数组(有行有列为二维),如果有三层,则是三维数组。。VBA中支持1~3维数组运算。Sub数组示例()DimxAsLong,yAsLongDimarr(1To10,1To3) '创建一个可以容下10行3列的数组空间Forx=1To4Fory=1To3arr(x,y)=Cells(x,y) '
2、通过循环把单元格区域a1:c4的数据装进数组中NextyNextx文案大全实用文档 MsgBoxarr(4,3)'根据提供的行数和列数显示数组arr(1,2)="我改一下试试"'你可以随时修改数组内指定位置的数据 MsgBoxarr(1,2)EndSub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素三、把单元格数据搬入内存:一、声明:DimarrasVariant '声明一个变量,不能声明其他数据类型Dimarr(1to10,1 to 2 ),这种
3、声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据或:dimarr() 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。二、装入arr=range("a9:c100") '装入很简单,变量=单元格区域三、读出文案大全实用文档装入数组后的单元格数值,可以按数组名称(行数,列数)直接读取该位置的值,如下面的代码。Msgbox arr(3,2) '就可以取出搬过去的而构成的数组第3行第2列的内容四、示例 Subs3()Dimarr()'声明一个动态数组(动态指不固定大小)Dimarr1 '声明一个Varia
4、nt类型的变量arr=Range("a1:c7") '把单元格区域A1:C7的值装入数组arrarr1=Range("a1:c7") '把单元格区域A1:C7的值装入数组arr1 MsgBoxarr(1,1) '读取arr数组中第1行第1列的数值 MsgBoxarr1(2,3) '读取arr1数组的第2行第3列的数值 EndSub四、把内存数据搬入单元格Subtest()Dimarr '声明一个变量用来盛放单元格数据DimxAsInteger文案大全实用文档arr=Range("a2:d5") '把单元格数据搬入到arr里,它有
5、4列4行 Forx=1To4 '通过循环在arr数组中循环arr(x,4)=arr(x,3)*arr(x,2) '数组的第4列(金额)=第3列*第2例 NextxRange("a2:d5")=arr '把数组放回到单元格中EndSubSubtest1()Dimarr(1To5)'声明一维数组Forx=1To5arr(x)=x*2 '通过循环给每个位置赋值NextxRange("A1:E1")=arr '把数组导入到excel中的a1:e1单元格中Range("A1:A5")=Application.Transpose(arr)
6、'如果是放在一列中,就需要对数组进行转置后再存放文案大全实用文档EndSub五、动态数组的声明Subdarr()Dimarr() '声明一个动态的arr数组(不知道它能盛多少数据)Dimkk=Application.WorksheetFunction.CountIf(Range("a2:a6"),">10")'计算大于10的个数ReDimarr(1Tok) '再次声明arr的大小,正好盛下k数量的值Forx=2To6IfCells(x,1)>10Thenm=m+1arr(m)=Cells(x,1) '通过循环把大于10的数字装入数组EndIfNe
7、xtxMsgBoxarr(2)EndSub文案大全实用文档六、数组的上标(lBOUND)和下标(UBOUND)arr(-19to8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8,如果用语句返回就是:Subt1()Dimarr(-19To8)MsgBoxUBound(arr)'返回最大编号,结果为8MsgBoxLBound(arr)'返回最小编号,结果为-19EndSub如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例Subt2()Dimarr(-19To8,2To5)MsgBoxUBound(ar
8、r)'返回第1维(行的)最大编号,结果为8MsgBoxLBound(arr)'返回第1维(行的)小编号,结果为-19MsgBoxUBou