2017-01-18 6 views
2

私はVBAの新人です。私はsum2()show 11の間にsum1()がなぜ10を表示するのだろうか?前もって感謝します。Excel VBA For ...次へ

Sub sum1() 
    Dim x As Integer 
    x = 0 
    For x = 5 To 5 
     x = x + x 
     MsgBox x 
    Next 
End Sub 

Sub sum2() 
    Dim x As Integer 
    x = 0 
    For x = 5 To 5 
     x = x + x 
    Next 
    MsgBox x 
End Sub 

答えて

3

A vba for -loopは、各繰り返しの最後にインデックス変数をインクリメントします。それがNextキーワードの役割です。 sum1()であなたが得る:

Sub sum1() 
    Dim x As Integer 
    x = 0 ' x is 0 
    For x = 5 To 5 ' x set to 5 
    x = x + x 'x gets 5+5=10 
    Next 'x gets 10+1=11 
    MsgBox x 'display x=11 
End Sub 

をしかしsum2()にあなたが得る:

Sub sum2() 
    Dim x As Integer 
    x = 0 ' x is 0 
    For x = 5 To 5 ' x is 5 
    x = x + x 'x gets 5+5=10 
    MsgBox x 'display x=10 
    Next 'x gets 10+1 and is now 11 
End Sub 

を私はそれ通常はwhileループ内で、あなたのインデックス変数を変更することをお勧め、@MitchWheatに同意します。より良いアプローチは次のとおりです。

Sub sum3() 
    Dim x as Integer 
    Dim i as Integer 
    x= 1 
    For i = 5 To 5 
     x = x + x 
    Next 
    MsgBox x 
End Sub 
+0

オースティンに感謝します。 – user7433793

+1

@ user7433793あなたの質問に対する答えを「受け入れる」ことによって、あなたのために一番うまくいくもの、人々はあなたの将来の質問に答えることがより幸せになります。 –

1

forループは、ループの最後にループ変数をインクリメントします。

2番目のコードスニペットでは、forループがxを10から11にインクリメントして表示します。

最初のコードスニペットは、表示後にxをインクリメントします。これはVBA特有のものではありません。これを確認するには

、実行します。余談として

Sub sum1_1() 
    Dim x As Integer 

    x = 0 
    For x = 5 To 5 
     x = x + x 
     MsgBox x 
    Next 

    MsgBox x 
End Sub 

を:それはループ内からループカウンタを変更するためのベストプラクティスではありません。それは理解しにくいコードにつながる可能性があります。

+0

ありがとうMitch! – user7433793

+0

@ user7433793答えの左上にある「ありがとう」ボタンをクリックして、緑色で色付けされた「v」のような形をしてください:P –