返回列表 上一主題 發帖

[發問] 若儲存格內容為0就整列不顯示

固定陣列是以dim宣告
那是在事先知道大小的情況。
但是我們是在執行到rng = .Range(.[c10], .[m83].End(3))
時才知道須要的大小(雖然不是準確)
這時就要重新定義他的大小,所以用redim!

TOP

回復 11# oobird


陣列1>
a = Sheets("1").[c10].CurrentRegion
    r = 1
    For i = 1 To UBound(a)
        ReDim Preserve arr(1 To 3, 1 To r)
        arr(1, r) = a(i, 1): arr(2, r) = a(i, 2): arr(3, r) = a(i, 3)
        r = r + 6
    Next
陣列2>
With Sheets("1")
rng = .Range(.[c10], .[m83].End(3))
End With
ReDim arr(1 To UBound(rng), 1 To 10)
For i = 1 To UBound(rng)
If rng(i, 11) - rng(i, 10) <> 0 Then
k = k + 1
For j = 1 To 6
arr(k, j) = rng(i, j)
Next
小弟比較了這2個陣列
發現在陣列2的rng變數的定義
rng = .Range(.[c10], .[m83].End(3))
等於設定了rng的起始與終止範圍
而在陣列1的r變數
是受制於變數a而終止
變數a的定義為
a = Sheets("1").[c10].CurrentRegion
這等於沒有設定變數a的終止範圍
所以大大你才將陣列1稱之為變動陣列
陣列2稱之為固定陣列
而非單純以dim或redim作判別基準區分固定或變動陣列?
小弟這樣理解正確嗎?

TOP

本帖最後由 luhpro 於 2010-9-7 22:32 編輯

回復 10# oak0723-1

其實在上面的程式中之所以可以用 ReDim 來重新配置 Arr 為一陣列是因為 Arr 初始宣告時是 Variant 型態,
所以它也可以表示為是一個(尚未定義大小的)陣列.

你可以開啟Excel VBA 的說明來看,
它對於 ReDim 的 解釋如下 :
ReDim 陳述式是用來 "決定" 或 "重新決定" 動態陣列的大小


回復 12# oak0723-1

我覺得不管是 .CurrentRegion 還是 .End(3) 兩者在程式執行到該行時都會是個確定的範圍,

之所以 ReDim Preserve arr(1 To 3, 1 To r) 會說它是個動態陣列,
是因為它在之前已經有被定義過陣列大小了, (因在迴圈中會重複執行該敘述數次)
之後還需要因 r 值而變動其大小故而是動態陣列.

至於

ReDim arr(1 To UBound(rng), 1 To 10)

則因該敘述之前只有 Dim arr 一個敘述, (也可視為 Variant 變數)
其實並沒有真的明確定義過 arr 這個陣列的大小,
直到該敘述才是真的將其定義為一個 "固定大小" 的陣列.

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題