Board logo

標題: [發問] 請問關於動態陣列ReDim [打印本頁]

作者: EGBT    時間: 2015-8-13 10:56     標題: 請問關於動態陣列ReDim

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

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

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

用最簡單的說明∼~
作者: ikboy    時間: 2015-8-13 20:30

宣告空陣列 Dim Arr()
Redim preserve Arr(新陣列大小)
作者: EGBT    時間: 2015-8-14 09:21

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

例如ReDim要插放在哪裡,或是隨著資料的增加或減少去控制ReDim...麻煩大大了
作者: lpk187    時間: 2015-8-14 09:50

回復 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
複製代碼

作者: EGBT    時間: 2015-8-14 11:27

哈,很謝謝樓上大大的耐心回答~~~
作者: EGBT    時間: 2015-8-15 12:09

回復 4# lpk187


大大,那我請問一下~

是不是要先有Dim ar()

後面才能使用ReDim...

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

哈...小弟笨拙..

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

Sup Ex()

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



End Sup

麻煩大大再給小弟多點智慧啊~~~
作者: lpk187    時間: 2015-8-15 14:07

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

回復 6# EGBT


    ReDim必需先行宣告Dim ar()
你寫的例子是這樣沒錯!
作者: EGBT    時間: 2015-8-16 00:55

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

Dim ar()
ReDim ar(n+1)

這樣可以嗎?
作者: lpk187    時間: 2015-8-16 01:14

回復 8# EGBT


    不行!這樣N沒法累加,一定要另外寫
n=n+1
作者: c_c_lai    時間: 2015-8-16 07:53

回復 6# EGBT
希望此圖解能對你有所幫助:
[attach]21727[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)