- ベストアンサー
変数が勝手に変わる理由を教えてください。
- プログラム内で利用されている変数rowNumberの値が変化する理由を教えてください。
- プログラムの実行結果として、ウィンドウに表示される変数rowNumberの値が変わってしまう理由を教えてください。
- プログラム内の処理によって、変数rowNumberの値が変動する理由を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足しますと、rowNumber は 元々 i を「参照渡し」してますので、i の変化に合わせて変化してます。 i = 1 で getTesuSum1 に渡され、MsgBox 1 更に copy に渡され i = 5 まで実行され、i = 6 で For を抜けて copy から戻った時に MsgBox 6 更に 次の For で i = 4 になり、MsgBox 4 次に For 内でインクリメントされて MsgBox 5 次に For 内でインクリメントされて MsgBox 6 そして card2(5) に 6 は入らずオーバーフロー 引数の規定は参照渡し(ByRef)なので 値渡し(ByVal) にするのも手です。 Sub getTesuSum1(ByVal rowNumber As Integer, tesu1 As Integer, sum1 As Integer) いずれにしても、同じ変数を ローカル以外で宣言して使うのは必要範囲に留めましょう。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
Sub addTesuSum は、どのようなコードなのでしょうか? >MsgBox rowNumber は、Debug.Print か、ウォッチ式の変わりですか? それ自体に、意味があるとは思えませんが。
補足
このプログラムはポーカーゲームのプログラムを作っていて、うまくいかないところがあったので、そのままそのプログラムを書き込もうとすると800字以上で書き込めなかったために、質問に必要なところ以外を削除したものですが、いらないところが残っていたようです。
- papayuka
- ベストアンサー率45% (1388/3066)
VBは解りませんが、、、 Dim i As Integer を Sub getExpectPoint1card(expectPoint1card() As Integer) Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer) Sub copy(row() As Integer, row2() As Integer, i2 As Integer) などでバラバラに使うなら、Sub 内で宣言しないとダメなのでは?
お礼
なるほど。rowNumberの値がiと等しいようになっているから、このようなことがおこるのですね。これで、わかりました。どうもありがとうございました。