
Dim i As Integer:Dim i2 As Integer:Dim card(5) As Integer:Dim expectPoint0card(1) As Integer '0枚のカードを交換する場合のすべての選択肢の期待値
Dim expectPoint1card(5) As Integer
Sub porkerGame()
card(1) = 1: card(2) = 2: card(3) = 3: card(4) = 4: card(5) = 5
getExpectPoint1card expectPoint1card
End Sub
Sub getExpectPoint1card(expectPoint1card() As Integer)
Dim tesu1 As Integer:Dim sum1 As Integer
For i = 1 To 5
getTesuSum1 i, tesu1, sum1
expectPoint1card(i) = sum1 / tesu1
Next i
End Sub
Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer)
Dim card2(5) As Integer:tesu1 = 0:sum1 = 0
MsgBox rowNumber
copy card, card2, 5
MsgBox rowNumber
For i = 4 To 55
MsgBox rowNumber
card2(rowNumber) = i
addTesuSum card2, tesu1, sum1
Next i
End Sub
Sub copy(row() As Integer, row2() As Integer, i2 As Integer)
For i = 1 To i2
row2(i) = row(i)
Next i
End Sub
上記のプログラムで、ウィンドウに1,6,4,5,6と表示され、その次には、エラーが表示します。僕は、ウィンドウに表示される変数RowNumberの値がしばらくの間は1のままであるようにプログラムを書いたつもりなのですが、変数rowNumberの値が変わるのは、どうしてでしょうか?教えてください。お願いします。
No.2ベストアンサー
- 回答日時:
補足しますと、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)
いずれにしても、同じ変数を ローカル以外で宣言して使うのは必要範囲に留めましょう。
なるほど。rowNumberの値がiと等しいようになっているから、このようなことがおこるのですね。これで、わかりました。どうもありがとうございました。
No.3
- 回答日時:
Sub addTesuSum
は、どのようなコードなのでしょうか?
>MsgBox rowNumber
は、Debug.Print か、ウォッチ式の変わりですか?
それ自体に、意味があるとは思えませんが。
この回答への補足
このプログラムはポーカーゲームのプログラムを作っていて、うまくいかないところがあったので、そのままそのプログラムを書き込もうとすると800字以上で書き込めなかったために、質問に必要なところ以外を削除したものですが、いらないところが残っていたようです。
補足日時:2005/04/17 17:37No.1
- 回答日時:
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 内で宣言しないとダメなのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロ 特定のセル値のみクリ...
-
先ほどの質問の続きなのですが...
-
【ASP.NET】 DataTextFieldの値...
-
marginとpaddingにマイナス
-
DBのデータをjavascript側で利...
-
PL/SQLでのTO_DATEの時間取得に...
-
パスワードの再入力処理
-
VBScriptで別フレームのセレク...
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
VBA ユーザーフォーム ボタンク...
-
PHP8でWarning:Undefined varia...
-
【ACCESS】リレーションを組ん...
-
[Excel VB]プルダウンで文字選...
-
エクセルでエラーを無視して一...
-
Excel VBA 配列の分割について
-
「XML」の読み方
-
利用者側のMACアドレスを取得し...
-
Excel VBAで、 ヘッダーへのセ...
-
Excle VBA Findメソッドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
VBA ドロップダウンリストを残...
-
C#の質問です
-
vb6のVSFlexGridで選択行、列の...
-
VB.NETでアクティブなformを知...
-
Excel VBAのリストボックスの値...
-
VB.NETのスクロールバーコント...
-
PL/SQLでのTO_DATEの時間取得に...
-
ユーザーフォームのテキストボ...
-
VBA(自然数)
-
マクロ 特定のセル値のみクリ...
-
マクロで奇数と偶数の値を2か所...
-
ACCESS VBA 画像ファ...
-
変数に代入してある数値を表示...
-
【ASP.NET】 DataTextFieldの値...
-
チェックした値を取得したい(C...
-
変数名の取得
-
windowsアプリケーションで小数...
おすすめ情報