关于EXCEL中VBA的数组理解

上传人:hs****ma 文档编号:411316851 上传时间:2023-10-31 格式:DOC 页数:15 大小:68.50KB
返回 下载 相关 举报
关于EXCEL中VBA的数组理解_第1页
第1页 / 共15页
关于EXCEL中VBA的数组理解_第2页
第2页 / 共15页
关于EXCEL中VBA的数组理解_第3页
第3页 / 共15页
关于EXCEL中VBA的数组理解_第4页
第4页 / 共15页
关于EXCEL中VBA的数组理解_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《关于EXCEL中VBA的数组理解》由会员分享,可在线阅读,更多相关《关于EXCEL中VBA的数组理解(15页珍藏版)》请在金锄头文库上搜索。

1、关于EXCEL中VBA的数组理解一、什么是VBA数组不要把VBA数组想的太神秘,它其实就是一组数字而已。把一组数按行、列排在一起,放在内存中。就是一个VBA数组。二、数组的维数数组的维数其实和文件管理的目录一样的,只有一层时就是一维。如果有两层则是二维数组(有行有列为二维),如果有三层,则是三维数组。VBA中支持13维数组运算。Sub 数组示例()Dim x As Long, y As LongDim arr(1 To 10, 1 To 3) 创建一个可以容下10行3列的数组空间For x = 1 To 4For y = 1 To 3arr(x, y) = Cells(x, y) 通过循环把单

2、元格区域a1:c4的数据装进数组中Next yNext xMsgBox arr(4, 3) 根据提供的行数和列数显示数组arr(1, 2) = 我改一下试试 你可以随时修改数组内指定位置的数据MsgBox arr(1, 2)End Sub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素三、把单元格数据搬入内存:一、声明: Dim arr as Variant 声明一个变量,不能声明其他数据类型Dim arr(1 to 10, 1 to2) , 这种声明也是错误的,固定大小的VBA数组是不能一次性装入

3、单元格数据或:dim arr() 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。二、装入arr =range(a9:c100) 装入很简单,变量 = 单元格区域三、读出装入数组后的单元格数值,可以按 数组名称(行数,列数) 直接读取该位置的值,如下面的代码。Msgbox arr(3,2) 就可以取出搬过去的而构成的数组第3行第2列的内容四、示例Sub s3()Dim arr() 声明一个动态数组(动态指不固定大小)Dim arr1 声明一个Variant类型的变量arr = Range(a1:c7) 把单元格区域A1:C7的值装入数组arrarr1 = Range(

4、a1:c7) 把单元格区域A1:C7的值装入数组arr1MsgBox arr(1, 1) 读取arr数组中第1行第1列的数值MsgBox arr1(2, 3) 读取arr1数组的第2行第3列的数值End Sub四、把内存数据搬入单元格Sub test()Dim arr 声明一个变量用来盛放单元格数据Dim x As Integerarr = Range(a2:d5) 把单元格数据搬入到arr里,它有4列4行For x = 1 To 4 通过循环在arr数组中循环arr(x, 4) = arr(x, 3) * arr(x, 2) 数组的第4列(金额)=第3列*第2例Next xRange(a2:

5、d5) = arr 把数组放回到单元格中End SubSub test1()Dim arr(1 To 5) 声明一维数组For x = 1 To 5arr(x) = x * 2 通过循环给每个位置赋值Next xRange(A1:E1) = arr 把数组导入到excel中的a1:e1单元格中Range(A1:A5) = Application.Transpose(arr) 如果是放在一列中,就需要对数组进行转置后再存放End Sub五、动态数组的声明Sub darr()Dim arr() 声明一个动态的arr数组(不知道它能盛多少数据)Dim kk = Application.Workshe

6、etFunction.CountIf(Range(a2:a6), 10) 计算大于10的个数ReDim arr(1 To k) 再次声明arr的大小,正好盛下k数量的值For x = 2 To 6If Cells(x, 1) 10 Thenm = m + 1arr(m) = Cells(x, 1) 通过循环把大于10的数字装入数组End IfNext xMsgBox arr(2)End Sub六、数组的上标(lBOUND)和下标(UBOUND)arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是: Sub t1()Dim

7、arr(-19 To 8)MsgBox UBound(arr) 返回最大编号,结果为8MsgBox LBound(arr) 返回最小编号,结果为-19End Sub如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例Sub t2()Dim arr(-19 To 8, 2 To 5)MsgBox UBound(arr) 返回第1维(行的)最大编号,结果为8MsgBox LBound(arr) 返回第1维(行的)小编号,结果为-19MsgBox UBound(arr, 2) 返回第2维(列的)最大编号,结果为5MsgBox LBound(arr, 2) 返回第2维(列的)最小编号,结

8、果为2End SubSub t3()Dim arrarr = Sheets(1).UsedRange Usedrange的行数和列数是未知的MsgBox UBound(arr, 1) 可以计算这个区域有多少行MsgBox UBound(arr, 2) 可以计算出这个区域有多少列End Sub七、使用Array函数创建常量数组:使用Array函数创建数组1维常量数组:Array(A,1,C) 2维常量数组: Array(Array(a, 10), Array(b, 20), Array(c, 30)也可以调用excel工作表内存数组:1维数量: A,1,C2维数量: a,10;b,20;c,30

9、内存常量数组有什么作用呢?1、简化赋值比如:我需要给数组arr分别赋值10 ,20,30,40 ,一般就需要分别赋值,即:arr(1)=10arr(2)=20arr(3)=30arr(4)=40而使用常量数量,只一句话:arr=array(10,20,30,40)2、调用工作表函数时使用:Sub mylook()Dim arrarr = a,10;b,20;c,30MsgBox Application.VLookup(b, arr, 2, 0)调用vlookup时可以作为第二个参数End Sub八、数组的合并和字符串拆分(Join & Split): 多个字符的合并和字符串按规律的拆分是经常遇

10、到的,如:A-REW-E-RWC-2-RWC 按分隔符-拆分成6个字符放在一个数组中有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串上面两种情况VBA提供了一对函数,即: split(字符串,分隔符) 拆分字符串join(数组,分隔符) 用分隔连接数组的每个元成一个字符串Sub t1()Dim arr, myst As Stringmyst = A-REW-E-RWC-2-RWCarr = Split(myst, -)按-分隔成一组数装入数组中MsgBox arr(0) 显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为AMsgBox Join(arr

11、, ,) 再用,把数组的每个值连接成一个字符串,结果为A,REW,E,RWC,2,RWCEnd Sub值得注意的是:split和join只能对一维数组进行操作,如果是单元格或二维数组怎么办?只有一条途径,想办法转换为一维数组:Sub t2()Dim ARRARR = Application.Transpose(Range(a1:a3) 用转置的方法,把单元格一列数据转换成一维数组MsgBox Join(ARR, -)End Sub九、Filter函数实现数组筛选: 数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的VBA函数是:Filter函数用法:Fil

12、ter(数组, 筛选的字符,是否包含) Sub DD()arr = Array(ABC, A, D, CA, ER)arr1 = VBA.Filter(arr, A, True) 筛选所有含A的数值组成一个新数组arr2 = VBA.Filter(arr, A, False) 筛选所有不含A的数值组成一个新数组MsgBox Join(arr2, ,) 查看筛选的结果End Sub遗憾的是函数只能进行模糊筛选,不能精确匹配。他山之石,可以攻玉,VBA中除可以利用的VBA函数外,还可以调用众多的Excel工作表函数对数组进行分解、查询和分析等,调用工作表函数可以省去循环判断的麻烦,进而提高运行效率

13、。 一、数组的最值1、Max和Min工作表函数Max和Min是求最大值和最小值的函数,同样在VBA中也可以求数组的最大值和最小值。如:Sub t()arr = Array(1, 35, 4, 13)MsgBox Application.Max(arr)最大值MsgBox Application.Min(arr)最小值End Sub2、large和small工作表函数large和small 是返回一组数的第N大和第N小,对VBA数组同样适用,如:Sub t1()arr = Array(1, 35, 4, 13)MsgBox Application.Large(arr, 2)第2大值 MsgBox

14、 Application.Small(arr, 2)第2小值End Sub二、数组的统计与求和1、SumSum函数可以在工作表中求,同样也可以对VBA数组求和,如:Sub t2()arr = Array(1, 35, 4, 13)MsgBox Application.Sum(arr)对数组进行求和End Sub2、Count和CountaCount和Counta可以统计数组中数字的个数和数字+文本的个数。Sub t3()arr = Array(1, 35, a, 4, 13, b)MsgBox Application.Count(arr)返回数字的个数4MsgBox Application.CountA(arr) 返回数组文本和数字的总个数End Sub三、数组的查询和拆分1、Mach查询数组Match函数可以查询一个指定值在一组数中的位置,它也可以用于VBA数组的查询。如:Sub t4()arr = Array(1, 35, 4, 13)MsgBox Application.Match(4, arr, 0)查询数值4在数组A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号