返回列表 上一主題 發帖

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

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

知道宣告陣列 Dim Arr(10) As Integer 裡面有11個空間
那假設我不知道我今天資料會產出多少筆. Ex 20..30..40..100..500...

是不是要改使用ReDim來宣告呢?

但我看了ReDim的說明有看沒有懂,上來論壇請教各位前輩...

用最簡單的說明~~

宣告空陣列 Dim Arr()
Redim preserve Arr(新陣列大小)

TOP

樓上大大您好,可以示範一下嗎...?

例如ReDim要插放在哪裡,或是隨著資料的增加或減少去控制ReDim...麻煩大大了

TOP

回復 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

哈,很謝謝樓上大大的耐心回答~~~

TOP

回復 4# lpk187


大大,那我請問一下~

是不是要先有Dim ar()

後面才能使用ReDim...

ReDim動態陣列不是放在前面使用嗎

哈...小弟笨拙..

像是先宣告陣列在宣告他的動態陣列

Sup Ex()

Dim ar()
ReDim Preserve ar(n)
...
..
..
..



End Sup

麻煩大大再給小弟多點智慧啊~~~

TOP

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

回復 6# EGBT


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

TOP

好哦 了解~所以我可以打成

Dim ar()
ReDim ar(n+1)

這樣可以嗎?

TOP

回復 8# EGBT


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

TOP

回復 6# EGBT
希望此圖解能對你有所幫助:

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題