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技巧!


分享到:


相關文章: