dポイントプレゼントキャンペーン実施中!

エクセルVBAを使い、計算プログラムを作りたいのですが、上手くいきません。
5問の問題があり、1問が間違っていたら、乱数を使い1ケタへ。合っていたら2ケタへ。
乱数を使い、If文で1ケタは表示することは出来ますが、合っていたら2ケタに表示するというIf文かswitch文での処理が分かりません。

ヒントでも構いません。
だれか分かる方がいましたら、教えて頂けますでしょうか?
宜しくお願いします。

A 回答 (2件)

最大の問題点




Sub リセット()

Dim i As Integer 'カウンタ変数
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer

For i = ORG_CLM To DST_CLM

Cells(i, ANSW1_RWS).ClearContents '値をクリア
Cells(i, ANSW2_RWS).ClearContents

Cells(i, ANSW1_RWS).Font.Color = vbBlack '文字色を黒に

正誤判定する前にクリアしちゃったら、全ての計算式が不正解扱いになりますので1桁しか表示されないですよね、クリアするのは、その後のIF文の後ですね


次に
A = Int(Rnd * 8) + 1
この乱数だと1~8までの数値しか作成されないですよね
1桁の整数なら
A= Int(Rnd * 9) + 1
になります

で最後に

C = Int(Rnd * 10) + 1
' D = Int(Rnd * 10) + 1
Cells(i, NUM1_RWS).Value = A * C
' Cells(i, NUM2_RWS).Value = D

ここの意味がわからん?
単純に2桁の整数を作成するのであれば

A = Int(Rnd * 90) + 10
Cells(i, NUM1_RWS).Value = A

だけで良い筈(前回の私の式も間違ってたけど)
    • good
    • 0

>1問が間違っていたら、乱数を使い1ケタへ。

合っていたら2ケタへ

1桁、2桁とは何を指していますか?

>計算プログラムを作りたい

計算プログラムとは?
何を計算するのですか?

>5問の問題があり

計算問題を作成し1問目の計算があっていたら計算問題の桁数を増やすって事?

質問内容からやりたい事の全体像がつかめません


1桁、2桁の乱数作成であれば
http://www.excel-vba.net/excel-function-016.html

Int(9 * Rnd + 1) 1桁

Int(99 * Rnd + 1) 2桁(計算結果によっては1桁の場合も有りますInt(89 * Rnd + 10)なら2桁確定かな?)

ですが、こう言ったことじゃない?

この回答への補足

意味不明で言葉が足らず申し訳ありません。
以下、ソースです。
今の状態は、1ケタ+1ケタの表示はできますが、この1ケタ+1ケタが正解だった時、2ケタ+1ケタを表示させたいのですが、出来ない状態です。
どこがおかしいのでしょうか?

Option Explicit '足し算
Const ORG_CLM As Integer = 4 '問題の開始行
Const DST_CLM As Integer = 8 '問題の終了行

Const NUM1_RWS As Integer = 2 '問題の数値1のB列
Const NUM2_RWS As Integer = 4 '問題の数値2のD列

Const ANSW1_RWS As Integer = 6 '回答欄のE列
Const ANSW2_RWS As Integer = 7 '回答欄のF列

Sub チェック()
Dim i As Integer 'カウンタ変数
i = 1
For i = ORG_CLM To DST_CLM
'B列の値とD列の値の和がF列に入力された答えと正しいか判定
If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then

Cells(i, 6).Font.Color = vbBlue '正解なら文字色を青に
Else
Cells(i, 6).Font.Color = vbRed '不正解なら文字色を赤に

End If

If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then

Cells(i, 7) = "○" '正解なら○で表示
Else
Cells(i, 7) = "×" '不正解なら×を表示
End If
Next i
End Sub
Sub リセット()

Dim i As Integer 'カウンタ変数
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer

For i = ORG_CLM To DST_CLM

Cells(i, ANSW1_RWS).ClearContents '値をクリア
Cells(i, ANSW2_RWS).ClearContents

Cells(i, ANSW1_RWS).Font.Color = vbBlack '文字色を黒に


'B列の値とD列の値の和がF列に入力された答えと正しくないか判定
'答えが合っていなかったら、1桁+1桁。
If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value <> Cells(i, ANSW1_RWS).Value Then
A = Int(Rnd * 8) + 1
Cells(i, NUM1_RWS).Value = A
' B = Int(Rnd * 8) + 1
' Cells(i, NUM2_RWS).Value = B

End If
'答えが合っていたら、2桁+1桁。

If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then

C = Int(Rnd * 10) + 1
' D = Int(Rnd * 10) + 1
Cells(i, NUM1_RWS).Value = A * C
' Cells(i, NUM2_RWS).Value = D
End If
Next i
End Sub

補足日時:2011/04/01 13:14
    • good
    • 0

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