電子書籍の厳選無料作品が豊富!

For構文で指定した数字以上の数字まで処理されます。例えば、
For i =1 to n (n=50)
・・・(処理)
next i
nは事前に求まっている値50です。しかし、処理されるのはiが1~51までとなります。デバック中にカーソルをnに当てると「50」となるのにiにあてると「51」となります。どうしてでしょうか?助けていただきたいです。よろしくお願いいたします。
ちなみに、処理の部分はIf構文で、配列を用いた短い行です。

A 回答 (4件)

For i =1 to n (n=50)


・・・(処理)
debug.print i & "回実行しました"
next i

とやると1から50まで、デバッグウィンドウに出力されます。

処理は50回されているということです。

ループは、i=51になったから抜けたということです。

これと同じ意味
i = 1 '←初期値
do until i > 50 '←50超えたら抜ける
・・・(処理)

 i = i + 1
loop



もっと噛み砕くと
i = 1 '←初期値
do
 if (i > 50) then  '←50超えたら抜ける
  exit do
 end if
・・・(処理)

 i = i + 1
loop

ということです。
    • good
    • 0
この回答へのお礼

ありがとうございました。具体的なご説明大変よく分かりました。

お礼日時:2004/06/17 23:57

どうもです.


下記のようなVB風コードを実行すると
(変数の型はこちらで推測しました)
--------------------------------
Dim i As Integer
For i = 1 To 2
 Debug.Print i ・・・1,2を表示
Next
Debug.Print i ・・・3を表示
--------------------------------
forループの中は,1,2で終了しますが,上記のようにNextの後でiの値を見るとTo で指定した値よりも多くなります.

e-lさんは,上記のようなことをいいたいのではないでしょうか?

そうだと仮定して,進めさせていただきますと,

乱暴な言い方をすればFor文の制御仕様によるものです.
Nextの部分でiを指定分インクリメントし
Toの後の値未満であれば継続で,for文の直後に戻るようなイメージです.
一般的には,nextの外でiの値を利用するケースは少ないですが,制御仕様を知らないとびっくりします.

自問自答すると潜在的にForループ内のiしか使用しないようにコーディングしているようです(!?)

C系風の場合も結果は同様です.
--------------------------------
int i;
for(i=1;i<=2;i++){
printf ("%d\n",i); ・・・1,2を表示
}
printf ("%d\n",i); ・・・3を表示
--------------------------------
Cの場合は,for(初期値,継続条件,増減方法)になっているので,個人的にはVBよりは直感的で,わかりやすいです.

少なくとも他にVB.net VBSなどもこのような仕様になっています.
よって,あなたのVBは壊れていないように思います.

上記の結果から,どうしてもNextの後でiを使用するならばi-1とすればよいかもしれません.

実際のコードが解らないので,推測してみましたが,的はずれでしたらごめんなさい.
    • good
    • 0
この回答へのお礼

ありがとうございます。分かりやすいご回答大変助かりました。

お礼日時:2004/06/18 00:37

iの値は、Forの中で確認していますか?



For-Nextを抜けたところでiの値を見れば51になっているのは正常だと思いますが…

ループの判断は next i で、iの値が+1される -> i が to の値以下なら、For以下を繰り返す という風に判断されるので、ループを抜けた時点ではiは50より必ず大きくなります。
    • good
    • 0
この回答へのお礼

ありがとうございました。大変よく分かりました。

お礼日時:2004/06/17 23:56

For文の正常は動作です。



ループ開始前に値が判断されますから、i=nで終了ではなくてi>nで終了になるので、nの値を超えたのを判断して終了します。

51になってからはループは廻らないので、安心してください。
    • good
    • 0
この回答へのお礼

ありがとうございました。大変よく分かりました。

お礼日時:2004/06/17 23:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!