Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5349|回复: 5

[分享] 【烟花原创】VBA零基础之第111篇 VBA数组(一)

[复制链接]
发表于 2014-2-28 23:52 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-2-28 23:58 编辑

从今天开始,我们聊聊VBA中的数组。
那么什么是数组(array呢?
帮助中是这么定义的:连续可索引的具有相同内在数据类型的元素所成的集合,数组中的每一元素具有唯一索引号,更改其中一个元素并不会影响其它元素。简单而言之,数组就是一组数据的存储空间。在这个存储空间中,可以放常见的数据类型如整型,字符串型,逻辑型,还可以存储对象,甚至是数组。


数组的优势在哪?
在数组中可以存储很多的值,普通的变量声明一次只能存储一个值。打个比方,如果要储存一年中每天的支出,使用数组的话,可以声明一个具有365个元素的数组变量,而不是声明365个变量。对于数组,可以引用整个数组中存储的值,也可以引用数组中的某个元素。在频繁读写单元格的场合中,如果对代码的速度有要求,经常会考虑使用数组来优化。


数组的分类
数组的类型,从维数上来分的话可以分为123……
从声明的方式上来说可以有静态数组(大小固定)和动态数组(大小可调整)。


数组中常见的几个概念:
下标,下界:数组中的每个元素都有特定的序列号。这个序列号也不是随便来的,需要代码在声明时指定。下标相当于某维的第一个编号(开始),在声明时下标是可以省略的,缺省情况下下标省略时默认值为0
上标,上界:上标相当于某1维的最后一个编号(结束),在声明时必须明确指定。
维数:数组常用的就是1维和2维,数组中每个元素都有一个唯一的编号。
1维数组通过1个编号就能定到。
1.jpg
例如上图声明的1维数组arr,一共有3个元素,元素的编号从13

2维数组就要通过2个编号的组合(类似于单元格的要通过行号与列号定位)来定位一个元素,如下图:
2.jpg

上图中的arr数组,第1维编号从14,第2维编号从02,对于2维,可以用单元格的地址表示法来理解,如第2行第0列。

1维的大小可以通过这个公式计算:上标-下标+1,如上图第1维的大小是4-1+1=4

数组中元素的总数是每
1维的大小相乘即可,上图中数组元素个数:(4-1+1)*(2-0+1)=12


静态数组的声明
Dim 数组名([下标 to] 上标,[下标 to ] 上标)  [as
[下标 to] 上标,表明每1维的大小。数组有几维,就添加几个[下标 to] 上标说明,各个维数声明之间用逗号相隔。
数据类型可以根据情况来选择,缺省为Variant类型。
下标通常是小于或等于上标的,否则会有编译错误提示,如下图:
3.jpg

1维的下标是5,比上标1大。
2维的下标是-10,比上标-1小。


定义一个
23列的2维数组
dim arr(1 to 2,1 to 3)


定义一个
1维数组
dir arr1(1 to 10)


当定义多维数组时,任意
1维的上标是不可缺少的。而下标值是有个缺省值的,默认为0。下标的缺省值可以在模块顶端添加Option base语句进行更改的。
Option base 1 下标值从1开始
Option base 0 下标值从0开始。

当在模块顶端添加了语句 Option base 1        
dim arr1(1,3)   
定义的是13列的数组     
一般建议完整的写出上下标,如arr(1 to 1,1 to 3)      

如果没有使用option base 语句  或 使用了option base 0后
dim arr1(1,3)   
定义的是24列的数组     

评分

参与人数 3 +22 收起 理由
mmsz_luwei + 1 很给力
xuyouxm + 15 很给力!加分!
ghostjiao + 6 看完赶紧加分

查看全部评分

发表于 2014-3-24 22:24 | 显示全部楼层
回复

使用道具 举报

发表于 2014-4-13 17:17 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 13:48 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-29 16:32 | 显示全部楼层
学习了,谢谢!还得,如何将单格的数据赋给数组。
回复

使用道具 举报

发表于 2016-8-5 11:06 | 显示全部楼层
老师讲的很详细
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 16:12 , Processed in 0.331284 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表