分享

Excel VBA 9.3 数组的静态和动态之分

 Excel和VBA 2022-05-11

数组的静态和动态之分

点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


相信大家都已经对数组有了一定的了解了,并在之前学习的过程中,我们也是使用过数组的相关方法了

但是看到今天的这个标题,你是不是感觉还有一点疑惑,数组还有动态和静态的分别?

为什么我在使用的过程中并没有发现呢?

我们来看几个例子

这是我们今天模拟的一份数据,这份数据是利用公式生成的一个随机数,数字区间是50~100,那么现在我们就用这个例子来讲述下什么是动态数组,什么是静态数组

看下代码

Sub test()
Dim arr
arr = ActiveSheet.UsedRange
End Sub

非常简单的代码,我们将工作表的所有适用区域都装到了数组中,那么现在这个arr里面装的就是单元格区域的数据了。

这个数组有什么特点呢?

区间是固定的

当前工作表的已使用区域是不是就那么大,并且他有多少行,有多少列,我们都是可以计算出来的

那么这样的一个区间是固定的,那么装到一个数组当中,得到的就是一个静态的数组

这就是最简单的静态数组

那么来看看动态数组

Sub test2()
Dim rng As Range, arr()
k = 1
For Each rng In ActiveSheet.UsedRange
    If rng > 80 Then
        ReDim Preserve arr(1 To 11 To k)
        arr(1, k) = rng
        k = k + 1
    End If
Next rng
End Sub

代码就稍微有一点长了,我们来看看最终的结果

这段代码要实现的效果,就是将这个单元格区域内所有大于80的数据全部找出来,并且状态数组中

那么现在我们单独看这个数据源

你知道这里面有多少个数字大于80嘛?一眼看下去,你肯定不知道,所以你才需要使用VBA来查找

那么当你不知道最终的结果有多少个 的时候,你又想要装到数组中进行后续的计算或者写入,那么这个时候你就要用到动态数组了。

起手式

ReDim Preserve arr(1 To 1, 1 To k)

ReDim Preserve是固定写法

arr是你申明的动态数组的名称,

后面两个括号内的是重点

看上面的截图,前面的代表的是第一个维度,后面的代表的是第二个维度

动态数组有一个特点,他只能改变一个维度,那就是最后一个维度,即第二个维度

所以在申明动态数组的时候,一定要保证只有第二个维度是动态的,第一个维度一定是静态的

如果没有现成的条件,努力想办法往这个方向发展

比方说我们今天的案例

我们要找出大于80的数据,那么就是个数不定,但是我最终的结果肯定是放在一列中展示的,所以第一个维度就可以是1

需要变化的就是第二个维度,找到一个,那第二个维度就加一

这是一个常用的构造动态数组的方法

最终我们可以看到这样的展示结果

这就是今天我们要学习的简单的动态数组的写法和构造方法

数组其实本身并不难,难就难在空间逻辑思维的构造,如何在脑海中形成一个动态数组的空间概念,这还需要大家在之后多学习多练习,最终才可以水到渠成

==========================

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多