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

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

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

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

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

例一

代码如下:

<code>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) = brrEnd Sub/<code>

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


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

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

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

例二

代码如下:

<code>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/<code>

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转置一下就可以了。


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

。。。


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


分享到:


相關文章: