当前位置:首页 > 科技 > 正文

VBA简单入门31:Redim语句,数组的裁剪和扩展


1、 截取部分数组数据

一碗水,我们可以倒出一半或三分之一。同样,数组里面的数据,当不需要全部输出到工作表的时候,我们也可以自定义地决定输出多少数据。

如下面代码,将一个10行3列的数组,从数组下标开始(相当于我们看到的数组的上部)截取5行2列的部分。

VBA简单入门31:Redim语句,数组的裁剪和扩展

如将10行3列数组输出到工作表的时候,Resize设定的范围是11行4列,那么多出的数组空间部分将赶回错误#N/A。

VBA简单入门31:Redim语句,数组的裁剪和扩展

存放数据数据的单元格区域范围却不能比数组大。


数组在内存中可以像单元格一样自由修改数据。如,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值标记的部分。

这样,我们就运用数据完成了数据的筛选。

VBA简单入门31:Redim语句,数组的裁剪和扩展

当然,我们也可以用一个新的数组brr来装入C的数据。见下面例子。

二、使用Redim语句设定数组的大小。

通常我们要装行李物品,肯定是找足够大的行李箱来装。同样我们可以使用Redim语句来定义一个足够大的数据,用来存储处理后的数据。这里要注意的是,如下面代码中的brr(),这里的括号不能省略,否则就不是数组,而是变体变量,不能是使用Redim语句。

VBA简单入门31:Redim语句,数组的裁剪和扩展

本例中数组brr是下图这个样子,只有K值的部分有数据,黄色部分空白。

但我们只输出其前2行数据到工作表中。

VBA简单入门31:Redim语句,数组的裁剪和扩展

Redim后的数组,其数据都会被清空,而且大小和纬度数都可以改变。

二维数组Redim为一维数组

VBA简单入门31:Redim语句,数组的裁剪和扩展

二维数组改变大小

VBA简单入门31:Redim语句,数组的裁剪和扩展

三、使用Redim Preserve扩展数据的 最后一维度大小,并保留原来的数据。

同样以上面的例子来作演示,这次我们先不设定数组brr的大小,而是在数组处理数据的时候,根据K值来扩展brr的大小。

这相当于我们盖厂房,开始是1000平,不够用了,就扩建到2000平。

下面代码同样可以达到上面代码的效果。

VBA简单入门31:Redim语句,数组的裁剪和扩展

在数组brr还没有转置的时候,brr是一个3行2列的数组。

转置后,成为2行3列的数组,输出到工作表中。

VBA简单入门31:Redim语句,数组的裁剪和扩展

使用Redim Preserve需要转置函数Transpose,因为其受到Transpose的限制(该问题见上一章)。本人习惯于先Redim设定一个足够大数组来处理实际问题。

最后,Redim了数组的大小就不能够使用Redim Preserve,否则会报错,提示下标越界。

有话要说...

取消
扫码支持 支付码