|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 hehex 于 2013-2-3 16:30 编辑
Lucky啊 发表于 2013-2-2 18:14 
不胜感激,谢谢大侠还没放弃我这超级笨蛋小白
1.首先要了解什么是VBA 数组:
VBA数组就是储存一组数据的数据空间。数据类型可以数字,可以是文本,可以是对象,甚至可以是另一个VBA数组.
2. VBA 数组的存在形态:
VBA数组是以变量形式存放的一个空间,它也有行有列,也可以是三维空间。
可以理解为内存中开辟的一个连续区域。
一维数组在内存中的存贮方式就是一行.。比如数组x(2),就是x(0) x(1) 这样行排列的两个变量的组合
注意:数组默认的下标是从 0开始的,除非你定义VBA数组下标从1 或者从其他数字开始。
二维数组就像一张excel 表格(注意是像,而不是,这个只是帮助理解不要混淆).
比如定义一个二维数组 Dim x (1 to 2, 1 to 2) ' 定义二维数组x ,一、二维下标都从1 开始每个维度都有2个元素。
在内存中是这样排列的就像一张表 X(1,1) X(1,2)
X(2,1) X(2,2)
你可以把这个存贮理解成一张excel 表,第一行第一列就是数组的(1,1) 第一个维度1 代表是在第一行,第2格维度代表列。 再次强调:这个只是帮助理解,无论是工作表对象,还是单元格对象和数组都不是一回事。
三维数组可以理解成为一个立体空间。具体就不详述了,其实在VBA 设计中主要用的是一、二维的VBA 数组。
Okay 首先了解了什么是VBA 数组的基本概念和数组的存贮方式,下面看看如何定义VBA 数组以及VBA 数组的分类:
VBA 数组分为以下几种:
1. 常量数组 使用Array 函数生成的数组。 比如 Array(1,2) 生成一个一维数组,数组成员的值分别是1和2.
2. 静态数组 在使用之前定义好数组的空间。比如 Dim x(5) 是定义一个数组装有5个数组元素,下标是从0-4
再比如 Dim X(1 to 10) 则是定义数组X 一共有10个数组元素,下标从1 开始到10结束。Dim X(1 to 10,1 to 10) 是定义一个二维静态数组,一二维度都有10个元素,下标都从1 开始。
3. 动态数组 Dim x() 这样的语句,在声明的时候数组的元素多少未知,数组维度未知。而在将来在程序中需要使用的时候使用Redim 语句进行重新设置之后使用。
讲完VBA 数组的类型之后,粗浅讲一讲VBA 数组的赋值。
1.首先 看下面的语句
Dim X(2)
X(0) = 5
x(1) = 7
这是最简单的给一维数组进行赋值的例子,将一个有2个元素的数组赋值,第一个赋值为5,第二个位置赋值为7.
2. 使用循环往数组里赋值的例子:
Dim x(1 to 5) ,i as Integer '声明一个从1开始的5 个元素的数组,声明一个整数变量i
for i = 1 to 5
x(i) = Cells (i,1)
next
上面这段程序是通过循环把单元格A1-A5 的值赋给数组X 。如果对单元格对象Range,Cell 不了解,请自行查书。通过循环来对数组进行赋值是最常用的方式。
3. 最后我们看看直接通过单元格对象的引用来给数组赋值的例子:
假设我们有一张excel 表 需要导入数组进行运算以提高工作效率。
假设该区域是5行3列,就是A1:C5 这个区域要导入
如果按照上面的方法如何把整张表格导入数组呢
很明显我们要先按行或者列进行循环(通常是把第二维作为内循环),然后再用另一维进行循环。
就是要做一个循环嵌套,语句麻烦而且效率比较低。(还有定义单元格对象的for each in 循环的方 法,这里就不讨论了)
于是excel 给我们提供了一种直接从单元格区域写入数组的方法:
就是 arr = Range ("A1: C5") 我们前面讲过二维数组的存贮模式,是不是很像一个excel 的二维区域?
arr(1,1) 就是单元格A1 的值。arr(2,1) 自然就是单元格B1 的值了。这样直接写入数组简单快速,效率高,容易理解。
直接导入方法有几点要注意下:
1. 直接从单元格导入数组,必然是二维数组。哪怕是你只导入一行 。系统也默认是一个一行多列的二维数组,这是系统设定的。牢记它。
2. 从单元格导入的数组的维度下标都是从1 开始的。 arr = Range ("A1: F1")
arr(1,1) 是A1 的值, arr(1,2) 是B1 以此类推,在这种情况下不会出现arr(0,0)
总之,VBA 数组的认识是学习VBA 程序设计的非常重要的组成部分,是提高程序效率必不可少的工具。所以想学习VBA 的人都不是不能绕过的环节。我上面这点粗浅的入门只是讲了最最初级的一点点部分,想加深理解还是要反复看叶枫老师书上对于数组的讲解。另外推荐山菊花老师经典的数组教程“墙上的红辣椒” 可自行去VBA 版精品区查找。
最后,任何教程都只是给你讲个概念,要学会必须自己动手尝试。如果不动手,再好的教程还是白搭,知识还是老师的而不是你自己的。刚开始学习VBA 数组编程的时候,特别是动态数组设计的时候。下标越界这个错误会像影子一样的缠绕着你,动脑子,为什么会发生下标越界,哪里越界了,下标的上下界到底是什么,逐渐想清楚了。在思考中你的数组功力也就小成了。
|
评分
-
2
查看全部评分
-
|