分享

VBA数组 | 从入门到精通(3)- 数组大小与维度转换

 asaser 2022-04-05
经过前面两篇的学习,你基本已经对VBA中的数组有了一些基本的认识,今天我们继续来学习第三篇,关于数组的大小及维度转化!


比如我们想在1000个数组中,找到偶数存入数组,我们并不知道结果到底有几个,怎么办?

有两种方式:
1、定义一个动态的,根据实际动态调整数组大小
2、定义一个足够大的数组 

具体我们还是来看代码:

图片

对着上面的代码,我们来详细说说其中的含义和用法!
在讲两种用法之前,我们看到代码中,小编还圈了一处,又是新的知识额,而且以后你还经常需要使用到他,所以我们先来说说这个Uboud相关知识!


知识点1:上标(Ubound)和 下标(LBound)


> 以下演示是一维数组:
图片
从图中,大家应该可以直观的看到我们要讲的知识点
数组上标:Ubound(数组)
数组下标:Lbound(数组)
一维数组的元素个数:上标-下标+1

> 二维数组上下标

Ubound和Lbound第二参数指定维度,如果是一维数组可以不用指定!
我们来看案例:Sheet4中准备了 4行3列的数组,写入数组进行二维数组测试

读取单元格区域,默认下标都是1,所以这里我们不再演示,有兴趣的可以把UBound或者Lbound即可!

多维数组在VBA中基本不用,所以我们这里不再演示!

补充上面的基础知识之后,我们再来谈上面的处理问题的两种方案!
第二种,定义大的数组,应该不用我多讲,这种方式的好处,就是一次定义,内存开辟好,效率高!

第一种,每次都去调整大小,不断的重新调整内存,速度相对较慢,不过我们可以通过UBound获取到数组最后的大小,第二种一般辅助其他计数变量处理!

特点,我们就说这么多,然后第一种中,有新的知识点


知识点2:Redim Preserve


dim 是定义,那么
Redim:你可以理解为重新定义,他的作用是调整最后一个维度的大小
Preserve:保留原数组的内容。
Redim Preserve:调整最后一个维度的大小并保留原有内容


通过两个案例来加深理解!

> ReDim案例

如果我们的上下标其中之一是非常数,那么直接dim 是错误的!
正确的处理方式,先定义一个动态数组,根据计算出来的上下标,通过redim 重新定义数组大小!

图片

但是ReDim Preserve只能改变最后一个维度的大小,如果你先改变其他维度,需要转置等方式调整一下!否则会报下标越界错误
    
图片

最后我们来补充一个知识点,那就是如何清空并初始化一个数组,这个在我们循环使用一个数组的时候特别有用!


知识点3:清空并初始化数组-Erase


如果没做清空初始化处理,数组中应该有3个元素,分别是2、4、6才对,但是本地窗口中,我们arr 3个元素都是空值!这就是Erase的作用了!


图片

官方一点的说明如下:

图片

OK,关于数组的大小问题,我们就说到这里,下一期: 数组筛选及常用方法敬请期待
多多【点赞】 【关注】 【收藏】 【转发】,给小编持续更新的动力
图片

VBA数组 | 从入门到精通(2)- 数组写入和输出

图片

VBA数组 | 从入门到精通(1)- 数组申明

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多