第二章数组
2.1数组的声明、赋值及读取
数组,就是多个数据或变量的集合。数组分为一维数组、二维数组、三维数组等等。通常我们使用的是一维数组和二维数组。
数组是先声明,后使用。
1、声明数组
数组分为静态数组和动态数组
(1)静态数组
静态数组,就是它的长度是固定不变的。它的声明格式是这样的:
Dim数组名(atob)As数据类型
其中a、b都是数字,表示数组从a开始,到b结束。如果只写一个数字,则默认数组从0开始,数字表示它的长度。通常我们声明数组的时候,都不声明它的数据类型,这个数组就可以接受任何类型的数据。
例句:
Dimarr1(6)'声明一个长度为6的一维数组,这个数组从0开始,它的实际长度是7。如下图所示:
Dimarr2(3)AsInteger'声明一个长度为3的整型一维数组,这个数组从0开始,它的实际长度是4。
Dimarr3(1To6)'声明一个长度为6的一维数组,这个数组从1开始,它的实际长度也是6。如下图所示:
Dimarr4(1To5,1To4)'声明一个5行4列的二维数组,这个数组的行和列都是从1开始。如下图所示:
通过以上案例我们可以发现,如果这个数组从0开始,那么它的实际长度要比声明的长度多1。如果这个数组从1开始,它的实际长度与声明长度一致。
(2)动态数组
如果定义时不知道数组的长度是多少,可以定义它为动态数组:
Dimarr()
像这样,不给出数组的长度,它就是一个动态数组。等确定了数组的长度之后,再重新定义该数组:
ReDimarr(1to5)
需要注意的是,在重新定义数组之前,如果这个数组已经有了数据,会把已有的数据全部清除掉。要想保留已有的数据,需要在数组前加上Preserve:
ReDimPreservearr(1to5)
2、数组赋值
arr(3)=100
对数组里的一个位置直接赋值。
arr=Array(1,2,3,4,5,6)
以数组的方式给数组赋值,产生一个从0开始的数组:
brr=Range("a6:f6")
把一行数据赋值给一个数组,产生一个从1开始的二维数组,这个数组1行6列。如下图所示:
crr=Range("a6:a16")
把一列数据赋值给一个数组,产生一个从1开始的二维数组,这个数组11行1列。如下图所示:
通过行和列的赋值,大家可以看到,无论是把一行、还是一列数据赋值给数组,都不能直接产生一维数组。这个时候,神器“乾坤大挪移”Transpose登场了!
brr=(brr)
crr=(crr)
Transpose是数组转换函数,可以把数组的行和列进行互换。比如上面把一行数据赋值给一个数组brr(1行6列二维数组),转换后相当于把一列数据赋值给它(6行1列二维数组):
把一列数据赋值给一个数组crr(11行1列二维数组),转换后会得到一个长度为11的一维数组。
所以,把一行数据赋值给一个数组,两次转换之后就可以得到一个真正的从1开始的一维数组:
brr=((brr))
drr=Range("a1").CurrentRegion
把一个区域赋值给一个数组,产生一个从1开始的二维数组,行数和列数取决于区域大小。如下图所示:
用循环语句把单元格区域给数组赋值,例如,把6行6列的单元格区域的值赋值给一个数组:
Fori=1to6
Forj=1to6
arr(i,j)=Cells(i,j)
Next
Next
3、数组的读取
数组的读取格式:
一维数组:数组名称(第几个)
二维数组:数组名称(行数,列数)
例如:arr(5)读取数组的第5个数据。这里要注意的是,如果数组是从0开始的,则是读取数组的第6个数据。
arr(3,2)读取数组第3行第2列的数据
小程序:
把下表中资产名称为“音响设备”的记录拷贝到h列,并统计它们的原值一共是多少?
卡片号
资产名称
建卡
原值
净值
0000793398
空调
2007-12-31
498720.00
14961.60
0000793400
台式电脑
2007-12-31
35670.00
1070.10
0001218983
音响设备
2007-12-31
12420.00
372.60
0001443995
音响设备
2008-06-11
6800.00
204.00
0001443996
音响设备
2008-06-11
6800.00
204.00
0001443997
音响设备
2008-06-11
6800.00
204.00
0003257991
台式微机
2010-12-29
6100.00
183.00
0003257992
台式微机
2010-12-29
6100.00
183.00
0003444159
电视机
2011-07-07
15600.00
468.00
0004715737
空调
2012-09-11
5700.00
171.00
0004715738
空调
2012-09-11
5700.00
171.00
0004966154
监控设备
2012-12-05
8000.00
240.00
0004966420
金库门
2012-12-05
76000.00
2280.00
0005925757
笔记本式微机
2012-12-30
5700.00
171.00
0006065400
监控设备
2012-12-30
24250.00
727.50
Sub数组应用()
Dimarr(),brr(),n%,s
行=Range("a1").
列=Range("a1").
ReDimbrr(1To行,1To列)
arr=Range("a1").CurrentRegion
Fori=2To行
Ifarr(i,2)="音响设备"Then
n=n+1
brr(n,1)=arr(i,1)
brr(n,2)=arr(i,2)
brr(n,3)=arr(i,3)
brr(n,4)=arr(i,4)
brr(n,5)=arr(i,5)
s=s+arr(i,4)
If
Next
[h1].resize(行,列)=brr
MsgBox"音响设备价值一共"s"元"
Sub
往期精彩回顾:
学习VBA,报表做到飞第一章入门篇1.27过程与函数
学习VBA,报表做到飞第一章入门篇1.26超链接
学习VBA,报表做到飞第一章入门篇1.25Dir语句
我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。