返回列表 上一主題 發帖

[發問] 完成for-next回圈後的變數值...是什麼?

[發問] 完成for-next回圈後的變數值...是什麼?

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

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

990909-1.rar (10.4 KB)

附件工作表中空無一物,表名也不對,代碼跟本不能執行。
二個不同目的的代碼運行的結果當然不同!

TOP

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

TOP

這是用f8鍵逐步循環查看變數的方法。
dd.gif
2010-9-10 17:29

TOP

本帖最後由 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這句程式碼的意思~~~
還煩請解惑~~~

990910-2.rar (35.02 KB)

TOP

回復 5# oak0723-1


k就是符合條件 rng(i, 11) - rng(i, 10) <> 0 的數量
程式中arr陣列在Redim時已經確定大小(就是Ubound(rng))
可見k一定是小於Ubound(arr,1)
所以表示你是將arr陣列前面k列寫入工作表而已
學海無涯_不恥下問

TOP

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

回復 6# Hsieh


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

TOP

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

TOP

回復 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
學海無涯_不恥下問

TOP

回復 8# oobird


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

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題