Redim方法其實我在上篇文章中已經用過,是用來調整動態數組的大小,因為我們有時候在用數組的時候,是不知道需要多大的數組的,而且Dim定義數組大小的時候是不支持變量的,所以這時候需要用到Redim。
例一:用數組實現依次將下表中數據依次存放到E列
代碼如下:
<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列
代碼如下:
<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在使用時有以下注意點:
- 只能通過更改上限來更改數組大小;更改下限會導致錯誤
- 只能調整最後一個數組維度的大小,並且無法更改維度數目
這樣做是錯誤的: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技巧!
閱讀更多 VBA編程開發 的文章