(2021年整理)关于EXCEL中VBA的数组理解_第1页
(2021年整理)关于EXCEL中VBA的数组理解_第2页
(2021年整理)关于EXCEL中VBA的数组理解_第3页
(2021年整理)关于EXCEL中VBA的数组理解_第4页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于excel中vba的数组理解关于excel中vba的数组理解 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(关于excel中vba的数组理解)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为关于excel中vba的数组理解的全部内容。关于excel中vba的数组理解一、什么是vba数组不要把vba数组想的太神秘,它其实

2、就是一组数字而已.把一组数按行、列排在一起,放在内存中。就是一个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) 通过循环把单元格区域a1:c4的数据装进数组中next ynext xmsgbox arr(4,

3、 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数组是不能一次性装入单元格数据或:dim arr() 这种声明方式是声明一个动态数组,也可以装入单元格

4、区域,构成一个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(a1:c7”) 把单元格区域a1:c7的值装入数组arr1msgbox arr

5、(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:d5) = arr 把数组放回到单元格中end subsub test1()d

6、im 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.worksheetfunction.countif(range(”a2:a6), 10”

7、) 计算大于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 arr(19 to 8)msgbox ubound(arr) 返回最大

8、编号,结果为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维(列的)最小编号,结果为2end subsub t3()dim arrarr = sheets(

9、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,c”2维数量: ”a”,10;b”,20;”c”,30内存常量数组有什么作用呢?1、简化赋值比如:我需要给数组a

10、rr分别赋值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): 多个字符的合并和字符串按规律的拆分是经常遇到的,如:a-rew-e-rwc2-rwc 按分隔符拆分

11、成6个字符放在一个数组中有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串上面两种情况vba提供了一对函数,即: split(字符串,分隔符) 拆分字符串join(数组,分隔符”) 用分隔连接数组的每个元成一个字符串sub t1()dim arr, myst as stringmyst = ”a-rewerwc-2rwcarr = split(myst, ”-)按-分隔成一组数装入数组中msgbox arr(0) 显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为amsgbox join(arr, ,) 再用”,”把数组的每个值连接成一个字符串,结果为”

12、a,rew,e,rwc,2,rwc”end sub值得注意的是:split和join只能对一维数组进行操作,如果是单元格或二维数组怎么办?只有一条途径,想办法转换为一维数组:sub t2()dim arrarr = application。transpose(range(a1:a3) 用转置的方法,把单元格一列数据转换成一维数组msgbox join(arr, )end sub九、filter函数实现数组筛选: 数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的vba函数是:filter函数用法:filter(数组, 筛选的字符,是否包含) sub dd(

13、)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工作表函数对数组进行分解、查询和分析等,调用工作表函数可以省去循环判断的麻烦,进而提高运行效率. 一、数组的最值1、max和min工

14、作表函数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 application。small(

15、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) 返回数组文

16、本和数字的总个数end sub三、数组的查询和拆分1、mach查询数组match函数可以查询一个指定值在一组数中的位置,它也可以用于vba数组的查询.如:sub t4()arr = array(1, 35, 4, 13)msgbox application。match(4, arr, 0)查询数值4在数组arr中的位置end sub2、index拆分数组数组的拆分在vba中是一个难题,如果是按行拆分数组,除了用循环外也只能借用api函数完成了.幸好我们可以借用工作表函数index达到按列拆分数组,即多列构成的数组,你可以任意拆分出一列构成新的数组。方法是:application.index(数

17、组, , 列数) ,例:sub t2()arr2 = range(”a1:b4) 把单元格区域a1:b4的值装入数组arr2arr3 = application.index(arr2, , 2)把数组第2列拆分出来装入新数组arr3中,新数组为二维数组msgbox arr3(2, 1)取出新数组第2行的值end sub四、数组维数的转换transpose转置数组在工作表中可以把行列转换。在vba中同样也可以做到转换的效果.1、一维转二维。sub t9()arr = array(1, 35, ”a”, 4, 13, ”b)arr1 = application.transpose(arr)msgbox arr1(2, 1)转换后的数组是1列多行的二维数组end sub2、二维数组转一维.sub t2()arr2 = range(”a1:b4)arr3 = application.transpose(application.index(arr2, , 2) 取得arr2第2列数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论