第二章 数组 2.1 数组的声明、赋值及读取

第二章 数组

2.1 数组的声明、赋值及读取

数组,就是多个数据或变量的集合。数组分为一维数组、二维数组、三维数组......等等。通常我们使用的是一维数组和二维数组。

数组是先声明,后使用。

1、声明数组

数组分为静态数组和动态数组

(1)静态数组

静态数组,就是它的长度是固定不变的。它的声明格式是这样的:

Dim 数组名(a to b) As 数据类型

其中a、b都是数字,表示数组从a开始,到b结束。如果只写一个数字,则默认数组从0开始,数字表示它的长度。通常我们声明数组的时候,都不声明它的数据类型,这个数组就可以接受任何类型的数据。

例句:

Dim arr1(6) '声明一个长度为6的一维数组,这个数组从0开始,它的实际长度是7。如下图所示:

Dim arr2(3) As Integer '声明一个长度为3的整型一维数组,这个数组从0开始,它的实际长度是4。

Dim arr3(1 To 6) '声明一个长度为6的一维数组,这个数组从1开始,它的实际长度也是6。如下图所示:

Dim arr4(1 To 5, 1 To 4) '声明一个5行4列的二维数组,这个数组的行和列都是从1开始。如下图所示:

通过以上案例我们可以发现,如果这个数组从0开始,那么它的实际长度要比声明的长度多1。如果这个数组从1开始,它的实际长度与声明长度一致。

(2)动态数组

如果定义时不知道数组的长度是多少,可以定义它为动态数组:

Dim arr()

像这样,不给出数组的长度,它就是一个动态数组。等确定了数组的长度之后,再重新定义该数组:

ReDim arr(1 to 5)

需要注意的是,在重新定义数组之前,如果这个数组已经有了数据,会把已有的数据全部清除掉。要想保留已有的数据,需要在数组前加上Preserve:

ReDim Preserve arr(1 to 5)

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 = Application.Transpose(brr)

crr = Application.Transpose(crr)

Transpose是数组转换函数,可以把数组的行和列进行互换。比如上面把一行数据赋值给一个数组brr(1行6列二维数组),转换后相当于把一列数据赋值给它(6行1列二维数组):

把一列数据赋值给一个数组crr(11行1列二维数组),转换后会得到一个长度为11的一维数组。

所以,把一行数据赋值给一个数组,两次转换之后就可以得到一个真正的从1开始的一维数组:

brr = Application.Transpose(Application.Transpose(brr))

drr = Range("a1").CurrentRegion

把一个区域赋值给一个数组,产生一个从1开始的二维数组,行数和列数取决于区域大小。如下图所示:

用循环语句把单元格区域给数组赋值,例如,把6行6列的单元格区域的值赋值给一个数组:

For i = 1 to 6

For j = 1 to 6

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 数组应用()

Dim arr(), brr(), n%, s&

行 = Range("a1").CurrentRegion.Rows.Count

列 = Range("a1")
.CurrentRegion.Columns.Count

ReDim brr(1 To 行, 1 To 列)

arr = Range("a1").CurrentRegion

For i = 2 To 行

If arr(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)

End If

Next

[h1].resize(行, 列) = brr

MsgBox "音响设备价值一共" & s & "元"

End Sub


往期精彩回顾:

学习VBA,报表做到飞 第一章 入门篇 1.27 过程与函数

学习VBA,报表做到飞 第一章 入门篇 1.26 超链接

学习VBA,报表做到飞 第一章 入门篇 1.25 Dir语句


我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!

相关文章

c语言函数中如何给一个字符串数组赋值?

1.打开Visual C++ 6.0,新建一个C++ source file源文件;2.输入以下代码: #include "stdio.h" #include ";3.代码关键部分,见图红色部分,第一...

.ArrayList源码三:数组扩容以及元素拷贝

数组扩容以及元素拷贝 这个 ArrayList 动态性的核心机制。ArrayList 源码三:数组扩容以及元素拷贝在之前的文章中,我们已经了解到 ArrayList 底层是基于数组 elementDa...

系列专栏(六):解构赋值

ES6作为新一代JavaScript标准,已正式与广大前端开发者见面。为了让大家对ES6的诸多新特性有更深入的了解,Mozilla Web开发者博客推出了《ES6 In Depth》系列文章。CSDN...

数组结构分为一维数组二维数组一维数组赋值使用

数组结构数组是最为常见的一种数据结构,不是基本数据类型是对象,是相同类型的用一个标识符封装到一起的基本类型数据序列组成一个对象。可以用一个统一的数组名和下标来确定数组中的元素。数组包括一维数组和二维数...

VBA一组代码如何搞定赋值给数组arr及回填数据给...

VBA++ 题记:一剪闲云一溪月,一程山水一年华。一世浮生一刹那,一树菩提一烟霞。岁月静好,现世安稳。纵算云水漂泊,心若安宁,亦可淡若清风。希望见者与不见者都能安康。静下心,多学习有用的知识,多提高自...