资源描述:
《excel vba数组入门教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ExcelVBA数组入门教程1.前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。2.数组的维数:Sub数组示例() DimxAsLong,yAsLong Dimarr(1To10,1To3) '创建一个可以容下10行3列的数组空间 Forx=1To4 Fory=1To3 arr(x,y)=Cells(x,y) '通过循环把单元格区域a1:c4的数据装进数组中 Nexty Nextx MsgBoxarr(4,3)'根据提供的行数和列数显示数组 arr(1,2)="我改一下试试"'你可以随时修改数
2、组内指定位置的数据 MsgBoxarr(1,2)EndSub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素3.把单元格数据搬入内存:一、声明: DimarrasVariant '声明一个变量,不能声明其他数据类型 Dimarr(1to10,1 to 2),这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据 或:dimarr() 这种声明方式是声明一个动态数组,也
3、可以装入单元格区域,构成一个VBA数组。 二、装入 arr=range("a9:c100") '装入很简单,变量=单元格区域 三、读出 装入数组后的单元格数值,可以按数组名称(行数,列数)直接读取该位置的值,如下面的代码。 Msgbox arr(3,2) '就可以取出搬过去的而构成的数组第3行第2列的内容 四、示例 Subs3() Dimarr()'声明一个动态数组(动态指不固定大小) Dimarr1 '声明一个Variant类型的变量 arr=Range("a
4、1:c7") '把单元格区域A1:C7的值装入数组arr arr1=Range("a1:c7") '把单元格区域A1:C7的值装入数组arr1 MsgBoxarr(1,1) '读取arr数组中第1行第1列的数值 MsgBoxarr1(2,3) '读取arr1数组的第2行第3列的数值EndSub4.把单元格数据搬入内存:Subtest() Dimarr '声明一个变量用来盛放单元格数据 DimxAsInteger arr=Range("a2:d5") '把单元格数据搬入到arr里,它有4列4行 Fo
5、rx=1To4 '通过循环在arr数组中循环 arr(x,4)=arr(x,3)*arr(x,2) '数组的第4列(金额)=第3列*第2例 Nextx Range("a2:d5")=arr '把数组放回到单元格中EndSubSubtest1() Dimarr(1To5)'声明一维数组 Forx=1To5 arr(x)=x*2 '通过循环给每个位置赋值 Nextx Range("A1:E1")=arr '把数组导入到excel中的a1:e1单元格中 Range("A1:A5")=Applicat
6、ion.Transpose(arr)'如果是放在一列中,就需要对数组进行转置后再存放EndSub5.动态数组的声明:Subdarr() Dimarr() '声明一个动态的arr数组(不知道它能盛多少数据) Dimk k=Application.WorksheetFunction.CountIf(Range("a2:a6"),">10")'计算大于10的个数 ReDimarr(1Tok) '再次声明arr的大小,正好盛下k数量的值 Forx=2To6 IfCells(x,1)>10Then m=m+1
7、arr(m)=Cells(x,1) '通过循环把大于10的数字装入数组 EndIf Nextx MsgBoxarr(2)EndSub6.动态数组的声明: arr(-19to8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8,如果用语句返回就是: Subt1() Dimarr(-19To8) MsgBoxUBound(arr)'返回最大编号,结果为8 MsgBoxLBound(arr)'返回最小编号,结果为-19 EndSub如果是有行列组成的二维数组呢?二维数组返
8、回行的下标和列的下标见下例 Subt2() Dimarr(-19To8,2To5) MsgBoxUBound(arr)'返回第1维(行的)最大编号,结果为8 MsgBoxLBound(arr)'返回第1维(行的)小编号,结果为-19 MsgBoxUBound(arr,2)'返回