Excel VBA 之 重定义数组长度方法Redim(Preserve)

Excel VBA 之 重定义数组长度方法Redim(Preserve)

编程文章jaq1232025-02-01 15:41:2131A+A-

Redim方法其实我在上篇文章中已经用过,是用来调整动态数组的大小,因为我们有时候在用数组的时候,是不知道需要多大的数组的,而且Dim定义数组大小的时候是不支持变量的,所以这时候需要用到Redim。

例一:用数组实现依次将下表中数据依次存放到E列

代码如下:

Sub test()
    Dim arr
    Dim brr()
    arr = [A1].CurrentRegion
    ReDim brr(1 To UBound(arr) * UBound(arr, 2), 1 To 1)'定义brr数组的大小
    n = 1
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)
            brr(n, 1) = arr(i, j)
            n = n + 1
        Next
    Next
    [E1].Resize(UBound(brr), 1) = brr
End Sub

从例一中可以看出,在程序运行前,我们是不知道数据的个数,所以需要用到Redim,定义数组brr的大小。


Redim方法还有个可选参数Preserve ,用来保留数组原数据,因为如果不加Preserve 的话,每次Redim后,数组中的数据将被清空,有时候我们需要在保留原数据的同时扩充数组,就必须加上Preserve

例二:如图,有一列数据,用数组实现将其中大于50的数取出,存放到E列

代码如下:

Sub test()
    Dim arr
    Dim arr2()
    Dim n%
    arr = [A1].CurrentRegion
    n = 0
    For i = 1 To UBound(arr)
        If arr(i, 1) > 50 Then
            n = n + 1'统计符合条件的值得个数,
            ReDim Preserve arr2(1 To n)'调整数组arr2的大小,并且保留原有数据
            arr2(n) = arr(i, 1)
        End If
    Next
    [D1].Resize(n, 1) = Application.Transpose(arr2)
End Sub

Excel VBA 之 统计词汇出现次数Sub test() Dim arr Dim arr2() Dim n% arr = [A1].CurrentRegion n = 0 For i = 1 To UBound(arr) If arr(i, 1) > 50 Then n = n + 1'统计符合条件的值得个数, ReDim Preserve arr2(1 To n)'调整数组arr2的大小,并且保留原有数据 arr2(n) = arr(i, 1) End If Next [D1].Resize(n, 1) = Application.Transpose(arr2) End Sub

ReDim Preserve在使用时有以下注意点:

  1. 只能通过更改上限来更改数组大小;更改下限会导致错误
  2. 只能调整最后一个数组维度的大小,并且无法更改维度数目
    这样做是错误的:ReDim Rreserve arr(1 to n,1 to 2)
    应该这样: ReDim Preserve arr(1 to 2,1 to n)
    如果需要调整第1维大小,那就要先扩充第2维,然后用Application.Transpose转置一下就可以了。


大家可以点开下面链接,查看我的其他文章哦!

848个Excel VBA 实用技巧,实例+详细解析,入门必看,建议收藏

Excel VBA 之 数组的优点及应用

Excel VBA 之 统计词汇出现次数

Excel VBA 之 去除重复项

Excel VBA 之 自动建立工作表目录

Excel VBA 之 将txt文档批量导入至Excel

。。。


喜欢本文章的朋友记得收藏、点赞、关注哦,网友们如果在Excel中遇到问题都可以找我交流,也可以在评论区或私信告诉我你想看到的VBA办公教程,我将在下期分享给大家,以后不定期更新Excel VBA技巧!

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21