For...Nextステートメントのカウンターの値は?

Question 49.1 Previous Next
はじめまして。よろしくお願いいたします。あまりにも初歩的な事で質問するのですが、教えて下さい。

500連発(第1弾)のマクロ番号 463の、Cells(行, 列).Value = 数 - 599999 のところですが、一番最初はなぜ答えが [0] にならないのですか?
昨日考えていたら分からないまま、パソコンの所で寝てしまっていました。本の中をコピペしました。

(例)
詳細は こちら
Private Sub ForNextを使ってセルに値を書きこむ()
    順 = 0
    For 行 = 5 To 12                            '★★★
        For 列 = 4 To 10
            For 数 = 1 To 599999 + 順
            Next
            Cells(行, 列).Value = 数 - 599999
            順 = 順 + 1
        Next
    Next                                        '★★★
End Sub
それともう一つあります。
For 数 = 1 To 599999 + 順
Next
時間待ちをする時、for next でループさせますがこの時間は何を基準とするのでしょうか? 数が多くなれば待ち時間も長くなるのは分かるのですが?
何とも味の無い質問で、お分かりになり難いかと思いますが、よろしくお願いいたします。
Answer   Copyright (C) 2001.9.20 永井善王
「パソコンのところで寝てしまった」とのこと、コツコツ勉強している姿が目に浮かびます。質問は 2つですね。
1. ループ時間の基準?
500連発(第1弾)のマクロ番号 463は、For...Nextステートメントの使い方のサンプルで、右図のようなワークシートの D5:J12セルに、1~ 56までの値を順番に書きこみます。

小規模な作業のために、マクロの実行が一瞬で済んでしまって、読者の目にとまりません。 そこで、ループ処理を実感できるように、時間稼ぎのためのコードを組み入れました。

For...Nextで繰り返し処理する回数と時間の関連をお尋ねですが、明快にはご説明できません。マクロを実行するパソコンのプロセッサ(CPU)の処理スピードは様々ですし、そのマクロだけのシングル処理か、他のアプリとマルチ処理しているかによっても変るでしょう。
  D E F G H I J
5 1 2 3 4 5 6 7
6 8 9 10 11 12 13 14
7 15 16 17 18 19 20 21
8 22 23 24 25 26 27 28
9 29 30 31 32 33 34 35
10 36 37 38 39 40 41 42
11 43 44 45 46 47 48 49
12 50 51 52 53 54 55 56
ご質問の主旨が、単純にマクロの実行を指定した時間だけ停止させたいのでしたら、Waitメソッドを使う方法があります。

2. 一番最初はなぜ答えがゼロにならないか?
結論から言います。
1回目のループでマクロの 5行目と 6行目の For...Next文の実行が終ると変数「数」の値が 600000になります。よって、7行目の
Cells(行, 列).Value = 数 - 599999 では、セルに 1がセットされます。なぜ、そうなるのでしょうか?

For...Next ステートメント
Forキーワードと Nextキーワードで囲まれた一連のステートメントを指定した回数だけ繰り返す(ループする)フロー制御ステートメントです。
構文
For counter = start To end [Step step]
   |
Next [counter]
counter カウンターに使う数値変数を指定する、配列変数およびブール型(Boolean)に含まれる変数は指定できない
start 引数 counterの初期値を指定する
step ループを繰り返すごとに引数 counterに加算される値を指定する、省略すると 1が加算される、負の数を指定することも可能

ループを開始した直後のカウンターの値が引数 start と同じであることは、容易に理解できます。しかし、ループを終了した直後の値は、どうなるのでしょうか。
ループの実行は次のように制御されます。
引数 step の値が、 正の数または 0 なら counter <= end 、  負の数なら counter >= end

つまり、カウンターの値が引数end の値と等しい間はループするので、ループを終了した直後の値としては、引数end の値よりも引数 step の値だけ大きい(または小さい)値となります。
答が 1になる理由がわかりましたか。

Excel VBA Macro