大家好,上节介绍了在使用数组之前如何声明数组,本节就来介绍静态数组如何赋值。(动态数组会单独一节讲解)
上 节 复 习
在介绍数组赋值之前,首先简单复习下上节介绍的声明数组和数组中元素的表示方法。
以常用的二维数组为例,声明一个3*4的二维数组arr1,数据类型为字符串型。
dim arr1(2,3) as string
声明数组时省略下标,默认从0开始,所以第一维是0至2,第二维是0至3。
数组中每个元素的的表示方法为数组名(第一维索引号,第二维索引号),例如arr1(0,0)、arr1(0,)、arr1(2,3)等,每个元素的坐标可以如下图所示。
还可以将数组该数组声明为dim arr1(1 to 3,1 to 4) as string。
其中第一维索引号为从1至3,第二维维从1至4。数组中每个元素也是数组名(第一维索引号,第二维索引号),例如arr1(1,1)、arr1(3,4)等,其他坐标如下图所示。
两种表示方法,第二种方法即下界从1开始更实用。因为这样数组中元素的坐标,与单元格对象的cells属性坐标一致。数组元素位置就可以和工作表中对应起来。
数 组 赋 值
在前面的编写sub程序过程中,在声明变量之后都要给变量赋值。
同样在声明数组后,对数组赋值,VBA程序才能通过数组访问数据。在给数组赋值时,和变量赋值一样,要分别给数组里的每个元素进行赋值。
下面以静态数组为例,声明了数组的维度,以及每个维度的下界和上界,数组容纳固定量的元素,给数组赋值主要有下面几种方式。
1、每个元素进行赋值
数组赋值时,需要给数组中每个元素进行赋值。这种方式比较简单
下面通过举例演示,如声明一个5个元素的integer类型的数组,将1到5的自然数保存到数组中。具体演示如下:
示例中声明了Arr(4) 的5个元素的大小的integer类型数组。赋值时将它每一个元素,从Arr(0)=1开始一直到Arr(4)=5,运行就完成了赋值。
再举个简单的例子,声明一个4个元素的integer类型的数组,将A1:A4单元格区域中的数值赋值给数组。
A列的单元格填入整数,声明了Arr(1 to 4)为4个元素的integer数组,然后依次将每个单元格的值赋值给数组中的元素从Arr(1) 到Arr(4)。最后再立即窗口中显示Arr(3)的值为3。
这种方法主要是帮助理解数组元素如何赋值,在VBA程序中通常涉及大量数据的赋值。就需要用其他更方便的方法代替。
2、通过循环结构赋值
对于批量处理数据时,通常都会借助于循环结构。同样在数组的批量赋值时,同样也可以借助于循环结构。比如上面两个小示例,都可以用循环结构改造。以第二个为例。
通过for循环结构变量i从1到4进行循环,将数组中的每个元素进行赋值。对于大量数据更加实用。
下面用二维数据举例,前面提到如果数组维度的下界均为从1开始,那么数组中元素的坐标,与单元格对象的cells属性相对应。
如表格中A1:D4区域共3行4列的有多种类型的数据,将它们赋值到数组中。需要先声明一个3*4的二维数组变体型数组(由于有不同类型的值,所以默认的变体型Variant类型)。将元素单独赋值是很大的工作量,下面就通过循环嵌套来将表格中的值赋值给数组。
代码中首先声明了3*4大小的二维数组,为默认的变体型数据类型。维度的下界均从1开始。
下面就是两个for循环嵌套。整形变量i从1循环至3,变量j从1循环至4,两个循环嵌套中,执行 Arr(i, j) = Cells(i, j)语句将cells(i,j)元素的值赋值给数组中的元素Arr(i,j)。
执行代码后在立即窗口中显示数组Arr(2,3)的值为“姓名” Arr(3,1)的值为“小白”。
这种通过循环语句给数组赋值的方法很经典,掌握后对数组和循环结构都会有很好的理解。而二维数组下界从1开始时与单元格cells属性是对应关系。
3、通过Range对象创建数组
上面介绍了通过循环结构给数组赋值后,上面提到二维数组下界从1开始时与单元格cells属性是对应关系。实际不通过循环嵌套结构也可以直接赋值。
如果想把一个单元格区域的值,直接存储到数组里,可以直接把单元格区域的值赋值给变量名。如下图所示:
代码中首先不是声明数组,而是声明了一个默认的变体型变量。
而Arr = Range("a1:d4").Value该语句就讲A1:D4单元格的值赋值给了Arr这个数组中.(由变体型变量变成数组。)
通过这种方式得到的数组,维度的下届都是1。即得到的这个数组其实就是Arr(1 to 3,1 to 4)
所以执行代码后在立即窗口中显示仍是数组Arr(2,3)的值为“姓名” Arr(3,1)的值为“小白”。
这种方法实际是直接创建数组的方法,这里归到数组赋值一并介绍。注意两个关键点。
1、声明的默认的变体型变量。
2、通过这种方式得到的数组,维度的下届都是1。
今天下雨
本节主要是介绍了数组的赋值的内容,特别是循环结构赋值、二维数组和单元格对象cells属性的对应、单元格range对象创建新数组等内容。后续在介绍动态数组、数组相关函数时都会再涉及和复习。
希望本文对你有帮助,有问题可以给在下方留言,祝大家学快乐。
|
|