专栏首页完美ExcelExcel VBA解读(152): 数据结构——谈谈数组

Excel VBA解读(152): 数据结构——谈谈数组

在VBA中,数组是一种很有用的数据结构。可以在数组中存放相关同类的数据,方便程序进行处理。本文主要较深入地讲解数组的概念。

数组实际上就是一个变量,用来存储多个相同类型的数据。

例如,下面的语句:

Dim payment As Integer

payment= 300

表示在变量payment中存储值300。也就是说,一个变量一次只能存储一个值。

如果我们有多个值需要存储,照这个方法,则需要多个变量:

Dim payment1 As Integer

Dim payment2 As Integer

Dim payment3 As Integer

Dim payment4 As Integer

Dim payment5 As Integer

payment1= 300

payment2= 250

payment3= 350

payment4= 100

payment5= 500

如果存储的值更多,例如有10000个值,则会需要10000个变量。这样,不仅麻烦而且易出错,查找变量的值也很麻烦,今后也难以对代码进行维护,代码也会很冗长。

其实,完全没有这个必要。对于这样的问题,我们可以使用数组轻松解决。假设数值存储在工作表列A中,为演示方便,假设只有5个数据,即数值在A2:A6区域,那么可以使用下面的代码来存储这些数值:

Dim i As Integer

Dim payments(1 To 5) As Integer

For i = 1 To 5

payments(i) = Range(“A1”).Offset(i).Value

Next i

上面代码中的变量payments就是数组,它一次存储了5个数值。

语句:

Dim payments(1 To 5) As Integer

声明了一个包含5个值的一维数组,数组名后括号中的内容指定了数组索引取值范围。示例中,表明该数组的索引从1开始至5结束。payments数组的值及对应的索引值如下图1所示。

图1

如果上面payments数组存储的是某小区1号楼5名住户1季度的水电费,那么下面的语句:

payments(3)

将得到第3位住户的水电费,即350。

现在,要使用数组分别存储这5名住户一年4个季度的水电费,则可使用下面的语句:

Dim payments(1 To 5,1 To 4) As Integer

这声明了一个二维数组。使用两个循环语句给这个二维数组赋值:

Dim i As Integer

Dim j As Integer

For i = 1 To 5

For j = 1 To 4

payments(i,j) = Cells(i + 1, j).Value

Next j

Next i

如下图2所示,现在payments是二维数组,且存储了单元格A2:D6区域中的数值。图2中,payments(3,2)中存储的值是300。

图2

再进一步,如果存储小区3栋楼的用户水电费信息呢?可以使用下面的语句:

Dim payments(1 To 5,1 To 4,1 To 3) As Integer

这声明了一个三维数组。如下图3所示,每栋楼的水电费数据在3个工作表中,可以将它们存储在这个三维数组中。

图3

当然,这种三维或更多维的数据不常用,只是了解一下,有助于对数组知识的理解。

小结

通过以上的学习,我们知道了数组可以用来方便地存储同一类型的多个值。通过声明数组来确定数组的大小,即能够存储的数据个数,以及存储的数据类型。通过数组索引来方便地获取相应位置的值。并且,可以声明一维、二维或多维数组,但一般常用的还是一维数组和二维数组。

本文分享自微信公众号 - 完美Excel(excelperfect)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CVPR 19系列1 | 基于深度树学习的Zero-shot人脸检测识别(文末论文)

    【导读】今天我们主要讲解零次学习及深度树学习用于人脸检测识别。今天主要会讲解人脸检测的13种欺骗攻击中的ZSFA(Zero-Shot Face Anti-spo...

    计算机视觉战队
  • ICML新研究提出泛化能力评估新指标:直接上向量余弦距离就OK,还开源了相关代码

    一篇出自比利时天主教鲁汶大学的研究发表在了ICML 2019识别和理解深度学习现象Workshop上。

    量子位
  • 传统图像算法+深度学习方法结合会有什么样的火花?

    老早之前,有同学在问,有没有传统图像算法与深度学习结合的,其实这类的不是很多,之前学生研究期间有做过一些类似这类工作,结果还是很可以的,结果确实会比单独使用的好...

    计算机视觉战队
  • 本周AI要闻

    6月25日,中国人工智能独角兽公司深兰科技与希腊知名高等学府塞萨洛尼亚里士多德大学在希腊地标性建筑扎皮翁宫签署战略合作协议,深兰科技将为希腊未来的智能城市建设提...

    mixlab
  • java版JieBa分词源码走读

    JieBa内部存储了一个文件dict.txt,比如记录了 X光线 3 n。在内部的存储trie树结构则为

    爬蜥
  • 一种插入、查找后继节点耗时为 lglgu 的算法van Emde Boas Trees

    假设总共有n个int元素,它的值在 {0,1,..,u-1}范围内,可以做到插入、删除、后继节点耗时为 lglgu 。

    爬蜥
  • 约束条件变更对算法运行时间所带来的影响

    有1,...,n次请求,去获取单个资源,每个请求的开始时间是s(i),结束时间是f(i), 对于请求i和j,如果二者的区间不重合,即f(i)<=s(j) 或者 ...

    爬蜥
  • 【推荐收藏】学习数据结构的框架思维

    本文是对整个数据结构及算法的总体框架认识,旨在帮助读者自上向下,从整体到细节,从抽象到具体地看待数据结构。希望通过本文读者能在对数据结构的学习和理解上能有更高层...

    Sam Gor
  • 基于上下文信息分离的无监督运动目标检测(文末附有论文及源码下载)

    【导读】今天我们主要分享基于上下文的技术用于目标检查。深层神经网络被训练用于利用来自除该区域(上下文)以外的任何其他地方的信息来预测区域内的光流,而另一个网络则...

    计算机视觉战队
  • 动态规划怎么用?

    动态规划适用于子问题不是独立的情况,即各个子问题之间包含公共的子问题。动态规划对每个子问题只计算一次,保存其计算结果到"一张表",重复利用,从而优化执行。

    爬蜥

扫码关注云+社区

领取腾讯云代金券