专栏首页Excel和Access学习笔记VBA数组(六)动态数组

VBA数组(六)动态数组

大家好,前面已经介绍过了如何声明数组、数组赋值、静态数组和数组函数等等知识点,本节主要讲解动态数组。

动态数组的定义

如果在声明数组不确定数组的大小,先不固定数组的大小,而在程序在运行时使用Redim语句重新定义数组大小即为动态数组。(而如果声明数组时即确定数组大小即为静态数组。)

声明动态数组

首先在用户窗体、模块或者过程中使用dim或public语句声明一个没有下标的数组。比如:

dim 数组名称()

然后在程序过程中使用ReDim语句重新定义该数组的大小。具体完整语句如下:

ReDim [Preserve] 数组名(下界 to 上界) [ as 数据类型 ]

使用ReDim语句可以反复改变数组的大小和维度,但不能用ReDim语句更改已经声明的数据类型,除非是默认的Variant所包含的数据。

使用ReDim语句对是否保留原值有两种情况:

1、不保留原值

在默认情况下,使用RdDim语句重新定义数组大小和维度时,数组中原来保存的值将全部消失。

即Redim 数组名(下标)[as 数据类型]。

下面通过几个简单的示例演示下:

首先定义Arr1为动态数组,变量i和变量j为整形变量。通过ReDim语句重新定义Arr1为一维的1到3的数组。给数组中的3个元素一次赋值。

然后用ReDim语句再次重新定义Arr1数组大小,此时在立即窗口中显示Arr1(2)元素,已经没有值了。

2、保留原值

在ReDim语句中使用Preserve关键字,只能重新定义数组最后一维的大小,并且不能改变数组的维数,但可以保持原有数组中的原来的数据。(注意使用Preserve关键字,如果ReDim重新定义最后一维的范围变小,多余的元素也是会消失的。)

同样上面的示例中,如果ReDim语句加Preserve再次重新定义Arr1数组大小,此时在立即窗口中显示Arr1(2)元素还是原来的值。

示例

下面通过其他两个简单的示例来帮助理解动态数组:

首先声明了动态数组Arr1,声明变量i和变量j为长整型变量。

使用Range("a65536").End(xlUp).Row,即使用单元格对象的END属性,获得A列最后一行的行号。(在单元格对象属性(二)章节有介绍。)即得到A列有值得单元格的数量。

通过ReDim语句重新定义Arr1数组的大小,范围是从1 to i。实际就是有值得单元格的行号范围。

通过For循环语句将单元格 Range("a" & j).Value的值赋值给Arr1(j)。

最后在立即窗口中显示Arr(3)元素值为range("A3")的值。

首先声明了动态数组Arr1,变量i和变量j为整形变量。

通过ReDim语句重新定义Arr1数组大小为二维数组,第一维范围为1到2,第二维范围为1到3。

通过双循环嵌套结构,将Cells(i,j)单元的值赋值给Arr1(i,j)元素。(实际上数组中元素的两个维度索引号和单元格的cells属性的行号和列号一一对应。)

这种方式在很多数组应用的案例中很常见,注意理解。


本节主要介绍动态数组的内容,有问题可以给我留言,祝大家学习快乐。

本文分享自微信公众号 - Excel和Access学习笔记(excel-note),作者:无言之月

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

原始发表时间:2019-06-18

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • VBA数组(一)基础知识

    大家好,前面介绍过VBA变量,可以通过它来访问数据。但对于大量数据时候,通过声明变量就显得太繁琐,此时就可以通过数组来访问数据解决。

    无言之月
  • VBA数组(二)声明数组

    大家好,上节介绍了数组的维度,索引号、上界和下界的知识,本节继续介绍数组的基础知识,包括数组的分类,以及如何声明数组。关于数组的内容相对抽象,会尽量介绍详尽。

    无言之月
  • VBA数组(三)数组赋值

    大家好,上节介绍了在使用数组之前如何声明数组,本节就来介绍静态数组如何赋值。(动态数组会单独一节讲解)

    无言之月
  • 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的。可见算法的重要性。 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础。 我在大学的...

    wangweijun
  • 算法题之优势洗牌

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。

    挥刀北上
  • 数组方法整理

    mcq
  • 13 个 JS 数组精简技巧,一起来看看。

    数组是 JS 最常见的一种数据结构,咱们在开发中也经常用到,在这篇文章中,提供一些小技巧,帮助咱们提高开发效率。

    前端小智@大迁世界
  • 数组是如何随机访问元素?数组下标为什么从0开始,而不是1?

    数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储相同类型的数据。

    搜云库技术团队
  • 房上的猫:数组

    一.数组:  1.定义:   (1)数组就是一个变量,用于将相同数据类型的数据储存在内存中   (2)数组中的每一个数据元素都属于统一数据类型  2.基本要素:...

    房上的猫
  • 深入理解 Java 数组

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。几乎所有程序设计语言都支持数组。

    静默虚空

扫码关注云+社区

领取腾讯云代金券