返回列表 上一主題 發帖

關於動態陣列程式碼的問題

關於動態陣列程式碼的問題

Sub yy()
Dim rng, arr, i%, j%, k%
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
問題 >這裡的k的起始值並沒寫...這樣沒有寫的狀況是不是代表k是從0開始
For j = 1 To 6
arr(k, j) = rng(i, j)
Next
arr(k, 8) = rng(i, 8) - rng(i, 6)
arr(k, 9) = arr(k, 8) - arr(k, 6)
arr(k, 10) = rng(i, 11) + rng(i, 10)
End If
Next
Sheets("2").UsedRange = ""
Sheets("2").[a5].Resize(k, 10) = arr
問題 >這裡的k不是已經跳出for-next迴圈..且該回圈也沒有Preserve...那不是k值就沒記憶?k不就是空的嗎?
End Sub

本帖最後由 oak0723-1 於 2010-9-8 19:58 編輯

什麼是Empty
真的不太懂
小弟另外
取1個例子如附件
分別以有Preserve和無Preserve之狀況試試
執行的結果........卻讓小弟更不明白~~~

990908-2.rar (17.33 KB)

TOP

回復 4# Hsieh


    請問[j9]和[j12]所顯示數值的意義是?

TOP

本帖最後由 oak0723-1 於 2010-9-9 15:52 編輯

回復 6# Hsieh


小弟還有個疑問
在第1個測試的含有Preserve程式碼中執行後
為何在數值與數值間還會出現許多逗號?(表示資料是空的?)
例如:,a-1,b-1,c-1,,,,,,,,,,,,,,,,a-2,b-2,c-2,,,,,,,
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
在以上這段程式碼中...不是把陣列的每個資料位子都指定填滿了嗎?
為何資料與資料間還有那多個逗點(小弟算了1下..有16個)

TOP

本帖最後由 oak0723-1 於 2010-9-9 20:04 編輯

回復 8# Hsieh


  為何有空的陣列儲存位置是因為顯示是將每個陣列儲存位置都顯示
因為r每次都加6
所造成部分儲存位置顯示是空的
是這個意思嗎?
那數值跟數值間應該有5*3=15個陣列儲存位置是空的囉?
所以才顯示16個逗號
因為每2個逗號間有1個空的數值存在?
嘿嘿
懂了
感恩~~~~

TOP

本帖最後由 oak0723-1 於 2010-9-9 20:36 編輯

回復 8# Hsieh


    那在請教大大
由這個程式碼
Dim a, r%, i%, arr()
    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
    [j9] = r
得到r445
那請教
下列這個程式碼for-next後的r(紅字標示)也是445嗎
    Dim a, r%, i%, arr()
    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
    Sheets("2").[c4].Resize(r - 6, 2) = Application.Transpose(arr)
    Sheets("2").[k4].Resize(r - 6, 1) = Application.Transpose(Application.Index(arr, 3))
以上詳附件

990909-2.rar (17.2 KB)

TOP

回復 11# Hsieh


    小弟試試
感恩喔~~~~

TOP

        靜思自在 : 有心就有福,有願就有力,自造福田,自得福緣。
返回列表 上一主題