Board logo

標題: [發問] 完成for-next回圈後的變數值...是什麼? [打印本頁]

作者: oak0723-1    時間: 2010-9-9 19:26     標題: 完成for-next回圈後的變數值...是什麼?

本帖最後由 oak0723-1 於 2010-9-10 16:25 編輯

以下程式碼
為何執行結果[j]=61
    r = 1
    For i = 1 To 10
        r = r + 6
    Next
    [j9] = r
不懂這個程式碼的變數變化
是否能有哪位先進指教
作者: oobird    時間: 2010-9-9 21:43

附件工作表中空無一物,表名也不對,代碼跟本不能執行。
二個不同目的的代碼運行的結果當然不同!
作者: oobird    時間: 2010-9-10 17:19

以下程式碼
為何執行結果[j]=61
    r = 1
    For i = 1 To 10
        r = r + 6
    Next
    [j9] = r
r的起始值為1,進行了10次循環,每次循環r的值加6,最後當然r為61了
不懂你的問題是什麼。
作者: oobird    時間: 2010-9-10 17:29

這是用f8鍵逐步循環查看變數的方法。[attach]2757[/attach]
作者: oak0723-1    時間: 2010-9-10 19:38

本帖最後由 oak0723-1 於 2010-9-10 19:48 編輯

回復 4# oobird


    其實小弟就是在探討之前oobird大大你幫小弟寫的那2個程式碼
程式碼1>
Private Sub CommandButton1_Click()
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
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
End Sub
這時的k值是什麼
所以小弟用
以下程式碼去試
程式碼2>
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
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
[q9] = k
結果如附件按鍵test3執行結果
在附件中執行結果是18
那是不是在程式碼1中的最後那2行程式碼中的k值就是18?
若是~~~小弟就更不懂了~~~~
Sheets("2").UsedRange = ""
Sheets("2").[a5].Resize(k, 10) = arr
或許小弟對Resize的意義有所誤解~~~~
或根本不懂Sheets("2").[a5].Resize(k, 10) = arr這句程式碼的意思~~~
還煩請解惑~~~
作者: Hsieh    時間: 2010-9-10 20:21

回復 5# oak0723-1


k就是符合條件 rng(i, 11) - rng(i, 10) <> 0 的數量
程式中arr陣列在Redim時已經確定大小(就是Ubound(rng))
可見k一定是小於Ubound(arr,1)
所以表示你是將arr陣列前面k列寫入工作表而已
作者: oak0723-1    時間: 2010-9-10 20:41

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

回復 6# Hsieh


    hsieh大大你好
現在小弟大概懂k的意思
所以我想我是不懂Resize的意義~~~~
還有看不懂Sheets("2").[a5].Resize(k, 10) = arr這句程式碼的意思~~~
可以幫小弟解釋嗎?
作者: oobird    時間: 2010-9-10 20:48

因為 arr是一個k*10的二維陣列,發寫入a5開始的k列*10欄的位置,
要把a5一個儲存格向外拓展為k列*10欄就要resize.
如k值為100
[a5].Resize(k, 10)就變成a5:j104的範圍。
作者: Hsieh    時間: 2010-9-10 20:55

回復 7# oak0723-1


    不懂Resize就把游標點到Resize然後按F1看說明
建議你先把以下2篇讀過再進一步
http://forum.twbts.com/viewthread.php?tid=26&extra=page%3D19
http://forum.twbts.com/viewthread.php?tid=25&extra=page%3D19
作者: oak0723-1    時間: 2010-9-10 21:12

回復 8# oobird


    [a5].Resize(k, 10)就變成a5:j104的範圍。
是筆誤嗎?
大大你的意思是應該這樣嗎
[a5].Resize(k, 10)就變成a5:j10的範圍
Hsieh
感謝你給的資料
那2篇文小弟有看過
可能是小弟給他有看沒有懂
我會再給他看過
作者: oobird    時間: 2010-9-10 21:24

回復  oobird


    [a5].Resize(k, 10)就變成a5:j104的範圍。
是筆誤嗎?
大大你的意思是應該 ...
oak0723-1 發表於 2010-9-10 21:12



    沒有筆誤,我強調如k的值是100,[a5].Resize(k, 10)就變成a5:j104的範圍。k是列,a5是第5列,擴充100列就是第104列,Resize(k, 10)後面的10是欄,a5是第一欄,擴充10欄就是j欄。
我不善於解釋。若還是不明白只有另請高明了!
作者: oak0723-1    時間: 2010-9-10 22:05

回復 11# oobird


    懂了
感恩
是小弟看太快了~~~~抱歉




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