一碗水,我们可以倒出一半或三分之一。同样,数组里面的数据,当不需要全部输出到工作表的时候,我们也可以自定义地决定输出多少数据。
如下面代码,将一个10行3列的数组,从数组下标开始(相当于我们看到的数组的上部)截取5行2列的部分。
如将10行3列数组输出到工作表的时候,Resize设定的范围是11行4列,那么多出的数组空间部分将赶回错误#N/A。
存放数据数据的单元格区域范围却不能比数组大。
数组在内存中可以像单元格一样自由修改数据。如,Cell(1,1)=''A''表示单元格A1的值为A;
arr(1,1)=''A''表示数组左上角第一个单元格的值为A。
遍历二维数组就相当于遍历单元格区域一样,对其赋值、修改内容都和单元格操作没有多大区别。
下面代码,提取数组arrA列为C的数据,用K计算其条数,然后将数据放在自身的上部存储,输出的时候只输出K值截取的部分。
A1:C10是原始的数组arr,E1:G10是提取数据后修改了的数组arr,但在输出数据的时候,使用Resize只输出E1:G10上部的无填充颜色部分E1:G2(黄色部分没有输出到工作表,写上只为参考),也就是K值标记的部分。
这样,我们就运用数据完成了数据的筛选。
当然,我们也可以用一个新的数组brr来装入C的数据。见下面例子。
通常我们要装行李物品,肯定是找足够大的行李箱来装。同样我们可以使用Redim语句来定义一个足够大的数据,用来存储处理后的数据。这里要注意的是,如下面代码中的brr(),这里的括号不能省略,否则就不是数组,而是变体变量,不能是使用Redim语句。
本例中数组brr是下图这个样子,只有K值的部分有数据,黄色部分空白。
但我们只输出其前2行数据到工作表中。
Redim后的数组,其数据都会被清空,而且大小和纬度数都可以改变。
二维数组Redim为一维数组
二维数组改变大小
同样以上面的例子来作演示,这次我们先不设定数组brr的大小,而是在数组处理数据的时候,根据K值来扩展brr的大小。
这相当于我们盖厂房,开始是1000平,不够用了,就扩建到2000平。
下面代码同样可以达到上面代码的效果。
在数组brr还没有转置的时候,brr是一个3行2列的数组。
转置后,成为2行3列的数组,输出到工作表中。
使用Redim Preserve需要转置函数Transpose,因为其受到Transpose的限制(该问题见上一章)。本人习惯于先Redim设定一个足够大数组来处理实际问题。
最后,Redim了数组的大小就不能够使用Redim Preserve,否则会报错,提示下标越界。
有话要说...