网站首页 > 文章精选 正文
第二章 数组
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.25 Dir语句
我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!
- 上一篇: C语言探索之旅:数组
- 下一篇: Excel绕不过去的坎:数组
猜你喜欢
- 2025-04-27 C# - 初识数组 033
- 2025-04-27 LeetCode-448-找到所有数组中消失的数字
- 2025-04-27 「算法」几分钟时间让你彻底学会—时间复杂度
- 2025-04-27 Vlookup一次性查找多个值,4种方法,你更喜欢哪种?
- 2025-04-27 用long类型让我出了次生产事故,写代码还是要小心点
- 2025-04-27 C语言实现从数组中随机选取并返回一个元素
- 2025-04-27 Excel如何运用INDEX+SMALL+IF数组函数进行第几次查找
- 2025-04-27 一式取数!教你如何快准狠地提取单元格里面的数字
- 2025-04-27 怎样的数组在手机号里容易让孩子成绩不稳定呢?
- 2025-04-27 正则表达式学习之替换分组练习
- 04-30圆的魅力:2025年高考圆过定点问题精彩案例
- 04-30原来多项式可以用来玩涂色游戏(多项式用什么表示)
- 04-30代数初步(代数初步是几年级学的)
- 04-30趣味线性代数(一),从二元一次方程组开始带你轻松入门线性代数
- 04-30线面平行关系的证明策略(线面平行性质定理的证明)
- 04-30高考专题复习——复数的知识点总结及经典题型归纳
- 04-30李代数与李群的关系(李群和李代数 数学基础)
- 04-30三角函数的节奏:用周期与对称简化计算
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)