前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA中数组、集合和字典(二)——对数组变量的赋值

VBA中数组、集合和字典(二)——对数组变量的赋值

原创
作者头像
用户8870853
修改2021-07-27 11:04:24
6.8K0
修改2021-07-27 11:04:24
举报
文章被收录于专栏:用户8870853的专栏

上次我们对比学习了一下ExcelVBA中数组、集合和字典的概念和声明语法,我个人觉得在声明部分,三者的区别还是挺大的。下面我们一块学习一下赋值方面的知识点,因为内容较多,我们今天就先学习一下给数组变量赋值的内容

三、赋值

不管是数组、集合还是字典,都有向变量赋值的操作,赋值也是这几个概念的核心和关键,操作也有很大不同。

1.向数组变量赋值

对数组来说,数组中的每个元素数据类型必须相同,从数组声明就可以看出,这是数组与集合和字典的明显不同。这就要求向数组变量赋值时的数据规范必须严格。

a.向数组中单个数组元素的赋值

当数组已经确定了长度,我们就可以对数组内的元素进行赋值。可以对数组中某一具体索引位置的数组元素进行写入的,如下图:

当数组长度还不确定,在代码运行过程中发现有满足条件的值时,才扩大数组长度,再将值赋给单个数组元素。这样的需求该怎么办呢?

例如有个题目,求100以内自然数中,第7个数字2和数字3的公倍数。

有的小伙伴很快就想到了思路,首先定义一个动态数组arr,然后从1到100开始循环遍历,当数字循环到2和3的公倍数时,ReDim该数组的长度为y,并把当前数字添加进数组,y自增加1,再循环到符合条件的数字时,再ReDim该数组的长度为y,再把当前数字添加进数组,依次循环到100,循环结束后,通过arr(索引)就得到了结果。我们按照这个思路写下代码,如下图:

在逐行运行时,我们观察一下本地窗口中,各个参数的值,如下图:

我们发现,在循环到第一个满足条件的数字6时,将6添加到数组中,这时是正常的,但是当循环到第二个满足条件的数字12时,在运行Redim arr(y)这行代码时,会将数组置空,之后才会将满图条件的数字放入到数组的第二个位置,像这样循环到最后,数组中只会存着最后一个满足条件的值,前边的都会被置空。这种情况是我们不想要的,我们只想扩大一下数组,之前填充到数组中的内容是不想改变的。

于是,我们在循环中重定义数组的代码中加上ReDim的参数Preserve,它的意思就是当arr是一个动态数组,用ReDim Preserve重定义arr修改长度时,不清空之前数组中的元素(Redim 不能重定义静态数组的长度)。我们再试一下,如下图:

如果在ReDim中使用了Preserve可选参数,只能调整数组最后维的大小,并且不能改变数组的维数。例如,如果数组只有一维,就可以修改该数组的大小,因为该维是最后的也是仅有的一维。但是,如果数组有两个或者更多维,就只能改变末维的大小并保留数组内容。

ReDim Preserve重定义数组长度时,该数组在声明时必须是动态数组,即Dim arr(),不能声明成Variant类型(即不能Dim arr或者Dim arr as Variant),否则都会报错。

b.向数组变量整体赋值

整体赋值的意思就是把一个数组直接赋值给数组变量,而不是通过对单个数组元素的赋值。整体赋值要求数组变量在声明时必须声明为动态数组或者Variant类型,不能向声明为静态数组的变量赋值,如果声明成静态数组的变量被整体赋值,即使数组长度一致,也会报错。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三、赋值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档