Excel VBA 数组基础(一)

上一篇文章,同样一段的程序,应用的常规的解法已经数组的解法,今天开始解密数组。

数组概念

数组就是一个列表或者一组数据表。它是由连续可索引的具有相同内在数据类型的元素所组成的集合,数组中每一个元素都具有唯一的索引号。更改其中一个元素并不会影响到其它元素。

数组存在内存,可以利用索引号获取该集合中每一个子集。

我个人认为,数组可以理解为一个虚拟的Excel的表格,它把(数组)excel的数据,储存在内存里面,只是你看不见。

上一篇文章,就可以理解把A列到D列的数组,放在数组中,保存在内存中。

数组的两个特点:

1、读写速度快

VBA读取对象中的值永远慢于读取内存中的值。可以借助VBA数组对程序提速。

2、无法永远保存

数据存于工作表区域内,可以永久保存。但存入内存中的变量数组和常量数组却受其作用域影响生命周期。

过程级别的私有数组变量或者常量数组在过程结束后会自动释放,结束其生命周期;

而公有的变量数组和常量数组在excel应用程序关闭后会自动释放。也就是重新启动excel后,以前任何数组都不存在。

计算机的计算过程为:读取硬盘里的数据,通过内存,把数值传给CPU里面进行计算,计算完成后,再通过内存,保存在硬盘上。

上一边文章的常规解法,就是按照上述的常规流程在运算。每一次运行都要进过上述5个步骤。

如果用了数组的解法,Excel放在硬盘的数组,被提取在内存里面,然后传给CPU进行计算,再传给内存储存。当运算全部完成后,再把内存的结果保存在硬盘上。

用数组进行运算,只有在第一提取,和最后一次保存时候,在与硬盘交流数据。但是常规的解法,每一次运算都要与硬盘传递数据,所以运算变慢。

数组分类

按照数组元素是否固定来分,可以分为静态数组动态数组

按照数组维度来分,可以分为一维数组、二维数组等,最多只能为60维。

数组的维度

数组可以是一维、二维直到六十维。而对于excel工作表来说,

excel 的每一行或者每一列就可以转换成一维数组,而多行多列就可以转换成二维数组。

二位以上的数组,很少在VBA的运算中出现,所以我们主讲一维数组和二维数组。

1、一维数组

在数组公式中,在A1:F1区域中输入数组公式:={1,2,3,4,5,6}

,然后按Ctrl Shift Enter,就可以在A1:F1之间得到了横向区域的值。

在A1:A6区域中输入数组公式:={1;2;3;4;5;6},然后按

Ctrl Shift Enter,就可以在A1:A6之间得到了纵向区域的值。

而VBA数组也可以得到同样的效果:

2.1 VBA 代码

Sub 数组()

Dim arr

arr = [{1,2,3,4}]

Range("a3:d3") = arr

End Sub

Excel VBA 数组基础(一)

[{1,2,3,4}]代表是一维横向数组。

需要注意的是VBA的一维数组,在Excel里面表示的是一列数字,所以你用上述的代码,把数组的内容写到一行里面,是可行的。但是如果你想把一维数组写到一行里面,则需要对数组进行转换。

Sub 数组()

Dim arr

arr = [{1,2,3,4}]

Range("a3:a6") = Application.WorksheetFunction.Transpose(arr)

End Sub

Application.WorksheetFunction.Transpose(arr)

Transpose函数,就可以对数组进行行列转换

2、二维数组

对于三行三列的数组,我们可以使用数组公式:={1,1,1;2,2,2;3,3,3}

在VBA中也可以用数组表示一个二维数组,如下面例子

注意分割数组,用的是";"号

Sub 二维数组()

[A1:C3] = [{1,1,1;2,2,2;3,3,3}]

End Sub


分享到:


相關文章: