Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1934 / 13645 ツリー ←次へ | 前へ→

【70973】ループ後の変数の値について質問です nh 12/1/22(日) 21:16 質問[未読]
【70974】Re:ループ後の変数の値について質問です kanabun 12/1/22(日) 22:07 発言[未読]
【70975】Re:ループ後の変数の値について質問です nh 12/1/22(日) 22:19 お礼[未読]

【70973】ループ後の変数の値について質問です
質問  nh  - 12/1/22(日) 21:16 -

引用なし
パスワード
   シートの2行目から4行目までの値を構造体配列に入れてます Excel2010
Option Base 0
Type struct
 num As Integer
 price As Integer
End Type
Dim structCo(2) As struct

Sub Test()
Dim i As Integer
For i = 0 To 2
 With structCo(i)
  .num = Cells(i + 2, 1)
  .price = Cells(i + 2, 2)
 End With
Next
MsgBox " i:" & i
End Sub
この時、なぜ最終的に カウンタのiが3になってしまうの?
ということなんですが、教えていただけないでしょうか。
0 to 2 で終わってんだから2になると思ったんですが、3が表示されます。

【70974】Re:ループ後の変数の値について質問です
発言  kanabun  - 12/1/22(日) 22:07 -

引用なし
パスワード
   ▼nh さん:
>For i = 0 To 2
>Next
>この時、なぜ最終的に カウンタのiが3になってしまうの?

(流れを、トレースしてみましょう)
For i = 0 To 2
  処理
Next
のとき、
まず、カウンタ変数i は 0にセットされ、
ループ内処理が終わって、
> Next
のところで、+1 され、ループ最終値2 と比較され、1<=2 ですから
ループ継続と判定され、
2回目のFor が始まります。
2回目の処理が終わって、
> Next
のところで、+1 され、ループ最終値2 と比較され、2<=2 ですから
ループ継続と判定され、
3回目のForループに入ります。
3回目の処理が終わって、
> Next
のところで、+1 され、カウンタiは 3になります。
ループ最終値2 と比較され、3> ですからLoopを脱出します。

(よく似ていますが、こちらは ちがいます)
Dim c As Range
For Each c In Range("A1:A3")
  処理
Next
のばあいセル・オブジェクトc は コレクション内の3つのメンバ
[A1], [A2], [A3]
を順に巡回する、という動作になりますので、
巡回後は c Is Nothing になります。
Dim s As Variant
For Each s In Array("あ", "い", "う")
  処理
Next
のような場合でも同様です。Loopが終わったらループ変数s
は Empty になります。

【70975】Re:ループ後の変数の値について質問です
お礼  nh  - 12/1/22(日) 22:19 -

引用なし
パスワード
   ▼kanabun さん:
>▼nh さん:
>>For i = 0 To 2
>>Next
>>この時、なぜ最終的に カウンタのiが3になってしまうの?
>
>(流れを、トレースしてみましょう)
>For i = 0 To 2
>  処理
>Next
>のとき、
>まず、カウンタ変数i は 0にセットされ、
>ループ内処理が終わって、
>> Next
>のところで、+1 され、ループ最終値2 と比較され、1<=2 ですから
>ループ継続と判定され、
>2回目のFor が始まります。
>2回目の処理が終わって、
>> Next
>のところで、+1 され、ループ最終値2 と比較され、2<=2 ですから
>ループ継続と判定され、
>3回目のForループに入ります。
>3回目の処理が終わって、
>> Next
>のところで、+1 され、カウンタiは 3になります。
>ループ最終値2 と比較され、3> ですからLoopを脱出します。
>

内部で条件判定としてカウンタに加算してるわけですね。
そうでないとループ脱出が出来ませんから
(当たり前の話か)

つまらん質問に丁寧に答えていただきありがとうございます。

1934 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free