Hello,大家好,在前面我们说过Excel函数中间的数组含义,那么你是否知道VBA中间的两个数据处理利器字典+数组呢?他们一旦结合起来将会发挥无可估量的作用,提升执行效率就在分秒之间。今天我们先说说数组,在下期我们会说说字典。
![15ba06bdea0a2ef4f1b82ccefa383f77.png](https://i-blog.csdnimg.cn/blog_migrate/620abd51f5c14bf02d4bd3a76a174182.jpeg)
那什么是VBA的数组呢?
VBA数组可以理解成是储存的一组数据的一个地方。他的数据类型可以是数字,文本,对象,当然也可以是VBA数组。可能有些同学会觉得比较抽象,但是经过慢慢的学习就不会觉得抽象啦!
或许在你心里会默默有一句话想问,我为嘛要学习数组呢?这么抽象的概念?当你听到他的优点以后,就会不这样想了。他的优点简而言之有2点,加快程序执行速度和简化代码功能,不要小看这2个作用,当你学习到后面就会发现你花很多精力在VBA对象上面是多么不明智的选择。
如下2个例子,可以看到使用数组耗时0.039,而没有使用数组耗时6秒,数组的运算速度是没有使用数组的153倍,相信你肯定看到这么一个小的地方,速度竟然相差这么多?
![029b9bf069b147da39b704a8b330ed2c.png](https://i-blog.csdnimg.cn/blog_migrate/bd6be905a7b2ce152374958b87fb5636.jpeg)
这个其实是和VBA的数组运算原理有很大的关系,VBA中的运算最终是在内存中进行的,如果数据已经在内存中,则直接进行运算,但如果数据是储存在单元格里则还需要先把数据从单元格里调入到内存中,然后再在内存中对数据进行运算.
![ac089c69c5da35899e7f8bccdd0515d2.png](https://i-blog.csdnimg.cn/blog_migrate/805d910fd1d261885699ae6979b3ce6d.jpeg)
既然已经知道数组的重要性了,那么你可否知道VBA数组有哪几个分类?
它可以分为2大类,如下:
按维数划分:1维、2维…….60维
按储存类型划分:静态数组、动态数组、常量数组
1维数组:横向排列的一组值。
代码如下所示,以下为1维数组和2维数组,我们用的最多的就是这2种,所以可以先了解这些。多维数组依次类推而已。
![41137c0747f05e299b26650817101244.png](https://i-blog.csdnimg.cn/blog_migrate/e58d5246af0d101730396145140d37a9.jpeg)
常量数组,arr = Array(1, 2, 3, 4, 5),数组Arr就是一个常数数组,他有5个常数元素,这个比较好理解吧!
静态数组:顾名思义,就是数组的区域大小是固定不变的,一旦超出这个区域就会提示错误。Dim arr(1 To 10, 1 To 2) ,这个就是声明arr是一个10行2列的二维数组,你明白木有?
动态数组:就是他的区域大小不固定的数组,这个在我们以后的工作中间,用的最多的就是这个动态数组啦!所以这个理解好这个非常重要,动态数组的声明方法和静态数组声明的方法稍有不同,动态数组是需要先用Dim声明是动态数组,当我们的数组大小一旦被确认了,还需要再次用Redim进行二次声明。
例01,step-01 Dim arr(),这是先定义为动态数组
Step-02 Redim arr( 第一维数组上标 to 第一维数组下标,第二维上标 to 第二维下标)
举一个实例来说明吧!如下所示的,看了这个你肯定就明白了上面的那2个步骤了,step-01等同于Dim arr(),step-02等同于ReDim arr(1 To k),就这样我们完成动态数组的处理。
![e7027f6b4102c429c3f9ffafce4c72c1.png](https://i-blog.csdnimg.cn/blog_migrate/53bc063bf981a4e842142c0776b3ece1.jpeg)
PS:需要注意的是,如果我们的数组需要随某个变量进行不断的扩充(减少),那么数组就需要多次进行声明,每扩充(减少)一次就声明一次;另外说一点如果数组是多维的,只能动态声明第末维的,如果需要把让第一维不断扩充,还需要先转置,这个处理方法比较麻烦,在我们以后会说到这个的处理方法,在这里先请熟记上面的知识点。
![1cde71413196d3964f782393fc51d1c1.png](https://i-blog.csdnimg.cn/blog_migrate/dde8de656829522921191af2f1f35f46.jpeg)
自此你肯定有疑问了,数据如何放在Excel中间呢?一起来看看,如下图所示的操作方法,这个例子说明了2个方法,把excel的数据赋值到数组(arr = Range("a2:d5")),把数组赋值到Excel中间(Range("a2:d5") = arr ),相信聪明的你肯定看到了。
![88d0f002bafabd0913531b6d28e516a3.png](https://i-blog.csdnimg.cn/blog_migrate/36968f557cfd64ad78b8ce750ea09908.jpeg)
现在我们说说的几个简单的运算吧!一起来加深对数组的了解。
VBA数组的大小确定,也就是我们说的上标和下标,通俗上说就是开始的位置和结束的位置值。
![77da4f0ba2241e0d913b37b0d2a9ec0f.png](https://i-blog.csdnimg.cn/blog_migrate/23cd3dba52b1a6d3b1a258e0302abbf0.jpeg)
VBA数组的数据处理之筛选操作,就是在一个数组中间帅选出来我们需要的数据。这个的使用方法很简单,就是数组= VBA.Filter(要帅选的数组, 帅选条件,是否包含这个),怎么是不是很好理解?
![de3ec4049101b2e49cd6ec05b4874d4b.png](https://i-blog.csdnimg.cn/blog_migrate/62347bd965b41ba503f3796c2c5f3801.jpeg)
VBA数组数据处理之拆分与合并
![1c285d3d962eef3cfe80dcfad49f006b.png](https://i-blog.csdnimg.cn/blog_migrate/83be0f2eb4a8e117fe76b60e447f2a2d.jpeg)
求VBA数组的中间的最值方法
![3037063c232d92cf8a538a9ca039dce2.png](https://i-blog.csdnimg.cn/blog_migrate/06b6fce62a6aea195970ef2ef7fc19d1.jpeg)
数组的统计与求和
![4005f46c3ec646ec0ee24441dcb5d64b.png](https://i-blog.csdnimg.cn/blog_migrate/ceb00afacc908c63c1a218a55ebf298e.jpeg)
数组的查询和处理工作
![8eea87fda55d88876dce082f04543a97.png](https://i-blog.csdnimg.cn/blog_migrate/2e9a247d633ac51738231705587e28d6.jpeg)
数组的拆分,这个在处理数组的数据时候,经常用到:
![256b816b8c48596e53d793eff07d5ea1.png](https://i-blog.csdnimg.cn/blog_migrate/faa92b0c44e5a353d11e04ef13829c10.jpeg)
怎么样,小伙伴们,您学会使用使用Excel VBA数组的基本概念和常用的使用方法了吗?相信你如果能够熟知上面的知识点,那么你对数组就能够入门了,有不懂的,有疑问的,可以下面进行留言。
![b24b4444f335cd1c586015fb536fecad.png](https://i-blog.csdnimg.cn/blog_migrate/d41dae343339b1410931e01a06723581.jpeg)
如果小伙伴还有其他的想知道或者想了解的,都可以直接先关注我然后在私信我,告诉我们您想知道什么,或者想了解什么,我们会根据你的需要进行扩展的,谢谢大家的支持!
如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
![54983029eb965a1b7ffd40c16d3f6fe2.png](https://i-blog.csdnimg.cn/blog_migrate/37e425dd230da61f7345789881066c5e.jpeg)
我是Excel教案,关注我持续分享更多的Excel技巧!