返回列表 上一主題 發帖

[發問] 請問關於動態陣列ReDim

回復 3# EGBT

我用一個簡單的例子說明:
以下列程式碼來說,程式讀取從A1到A欄的最後一格做為程式處理的範圍,但我不知它最後會落在哪裡,
這時就可以利用ReDim了,讓它一個一個累加到最格處理的儲存格,但這裡要注意的事是ReDim只能增加最後一維的維度
例如ReDim arr(1 to 3,1 to n)只能增加紅字部份的維度
若ReDim後面沒有加上Preserve則每次增加維度後必會刪除原來陣列的內容,所以以下列程式來說為了不刪除其陣列中的內容
故寫為 ReDim Preserve ar(n)
  1. Sub Ex()
  2. Dim ar()
  3. n = 1
  4. For Each Rng In Range("a1", Cells(Rows.Count, 1).End(xlUp).Address)
  5.     ReDim Preserve ar(n)
  6.     ar(n) = Rng
  7.     n = n + 1
  8. Next
  9. [C1].Resize(UBound(ar)) = Application.Transpose(ar)
  10. End Sub
複製代碼

TOP

本帖最後由 lpk187 於 2015-8-15 14:09 編輯

回復 6# EGBT


    ReDim必需先行宣告Dim ar()
你寫的例子是這樣沒錯!

TOP

回復 8# EGBT


    不行!這樣N沒法累加,一定要另外寫
n=n+1

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題