Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2013)
i = i + 1 がピンときません
投稿日時: 19/12/06 07:40:39
投稿者: beginner001

下記の記述を実行すると1から始まりC9のセルに9が表示されて終わります。
i = i + 1 で i+1のiが10になるとiが11になってしまうからiは9で止まると考えればよいのでしょうか?
i + 1 のiが10になると i は11になってしまうから成立しないなということは分かります。
よろしくお願いします。
 
Sub Exitsample1()
   Dim i As Integer
    
    i = 1
    Worksheets("Sheet1").Activate
    Do
         Worksheets("Sheet1").Cells(i, 3) = i
         i = i + 1
         If i = 10 Then
    Exit Do
         End If
 
    Loop
End Sub

回答
投稿日時: 19/12/06 09:09:47
投稿者: WinArrow
投稿者のウェブサイトに移動

処理の主眼を変数「i」に置くのではなく、
 「セルの代入に置く」と考えます・・・・本来の処理
  
貴方の意図は、
 「10個のセルに値を代入したい」
ということではないでしょうか?
そのために「i」をいくつまで変化させるとよいかということになります。
  
変化させる・・・・つまりループさせる
方法としては、Do〜Loopや、For〜Nextという方法があります。
Do〜Loopでも、終了条件を、本来の処理の前に書くか、後に書くか、という記述方法があります。
  
   
掲示の記述は、本来の処理の後に終了条件が書かれていますから、
 意図する回数より、1つ少ないということになります。
 現在のコードをなるべく変えずに修正するとするならば
>If i = 10 Then
に修正すればよいでしょう。
 
ループの中で、Exit Do
を使って終了条件を指定していますが
次のように記述することもできます。
i = 1
 Do
   セルへの代入
  i = i + 1
 Loop Until i > 10
   
   
本来の処理の前に終了条件を記述する方法
i = 1
 Do Untl i = 10
セルへの代入
i = i + 1
 Loop
   
 For 〜Nextの書き方
  
For i = 1 To 10
セルへの代入
Next
 
どちらの記述がわかりやすいかを判断して考えてみましょう。
  
  

回答
投稿日時: 19/12/06 09:42:32
投稿者: WinArrow
投稿者のウェブサイトに移動

文章の一部に節女宇不足がありました。
訂正します
 
>現在のコードをなるべく変えずに修正するとするならば
>>If i = 10 Then
>に修正すればよいでしょう。
 

 現在のコードをなるべく変えずに修正するとするならば
>If i = 10 Then

If i > 10 Then
に修正すればよいでしょう。
 

回答
投稿日時: 19/12/06 09:54:21
投稿者: simple

ステップ実行ということをご存じですか?
F8キーを押しながら、一行ずる実行させる機能です。
そのつど i がどうなるか確認してみてはどうですか?体感できると思います。
 

Sub Exitsample1()
    Dim i As Integer
    
    i = 1
    Worksheets("Sheet1").Activate
    Do
        Worksheets("Sheet1").Cells(i, 3) = i  '  i は 9 になったとする。
        i = i + 1                             '  i は 10 になる
        If i = 10 Then                        ' 条件成立
            Exit Do                           '  Do Loopから脱出
        End If
    Loop
End Sub
(Exit Doのインデントを正確に書きましょう)
 
なお、iが1から9まで実行させたい、という明確な範囲が先に決まっているときは、
すでに指摘いただいているように、For .. Nextを使う方が、
まぎれがありませんよ。
 
また、質問のタイトルに関連して言えば、
 i = i + 1 は
 i ← i + 1
つまり、iに1加算したものを変数iに代入する、
と読むとよいかもしれません。

投稿日時: 19/12/06 10:38:38
投稿者: beginner001

WinArrowさん
simpleさん
お二方ありがとうございました。
実際に指摘していただいた記述、
If i > 10 Then
For。。Nextとやってみました。
私の投稿した式との違いが明確になりました。
重ねてありがとうございました。