预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

ExcelVBA数组入门教程 1.前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。 2.数组的维数: Sub数组示例()DimxAsLong,yAsLongDimarr(1To10,1To3)'创建一个可以容下10行3列的数组空间Forx=1To4Fory=1To3arr(x,y)=Cells(x,y)'通过循环把单元格区域a1:c4的数据装进数组中NextyNextxMsgBoxarr(4,3)'根据提供的行数和列数显示数组arr(1,2)="我改一下试试"'你可以随时修改数组内指定位置的数据MsgBoxarr(1,2)EndSub 总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素 3.把单元格数据搬入内存: 一、声明: DimarrasVariant'声明一个变量,不能声明其他数据类型 Dimarr(1to10,1to2),这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据 或:dimarr()这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。 二、装入 arr=range("a9:c100")'装入很简单,变量=单元格区域 三、读出 装入数组后的单元格数值,可以按数组名称(行数,列数)直接读取该位置的值,如下面的代码。 Msgboxarr(3,2)'就可以取出搬过去的而构成的数组第3行第2列的内容 四、示例 Subs3() Dimarr()'声明一个动态数组(动态指不固定大小)Dimarr1'声明一个Variant类型的变量arr=Range("a1:c7")'把单元格区域A1:C7的值装入数组arr arr1=Range("a1:c7")'把单元格区域A1:C7的值装入数组arr1MsgBoxarr(1,1)'读取arr数组中第1行第1列的数值MsgBoxarr1(2,3)'读取arr1数组的第2行第3列的数值EndSub 4.把单元格数据搬入内存: Subtest()Dimarr'声明一个变量用来盛放单元格数据DimxAsIntegerarr=Range("a2:d5")'把单元格数据搬入到arr里,它有4列4行Forx=1To4'通过循环在arr数组中循环arr(x,4)=arr(x,3)*arr(x,2)'数组的第4列(金额)=第3列*第2例NextxRange("a2:d5")=arr'把数组放回到单元格中EndSub Subtest1()Dimarr(1To5)'声明一维数组Forx=1To5arr(x)=x*2'通过循环给每个位置赋值NextxRange("A1:E1")=arr'把数组导入到excel中的a1:e1单元格中Range("A1:A5")=Application.Transpose(arr)'如果是放在一列中,就需要对数组进行转置后再存放EndSub 5.动态数组的声明: 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的数字装入数组EndIfNextxMsgBoxarr(2)EndSub 6.动态数组的声明:arr(-19to8)这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8,如果用语句返回就是: Subt1() Dimarr(-19To8) MsgBoxUBound(arr)'返回最大编号,结果为8 MsgBoxLBound(arr)'返回最小编号,结果为-19 EndSub 如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例 Subt2()Dimarr(-19To8,2To5) MsgBoxUBound(arr)'返回第1维(行的)最大编号,结果为8 MsgBoxLBound(arr)'返回第1维(行的)小编号,结果为-19MsgBoxUBound(arr,2)'返回第2维(列的)最大编号,结果为5MsgBoxLBound(arr,2)'返回第2维(列的)最小编号,结果为2EndSub Subt3()Dimarrarr=Sheets(1).UsedRange'Usedrange的行数和列数是未知的MsgBoxUBound(arr,1)'可以计算这个区域有多少行MsgBoxUBound(arr,2)'可以计算出这个区域有多少列EndS