• 締切済み

1問、間違っていたら、1ケタへ 合っていたら2ケタ

エクセルVBAを使い、計算プログラムを作りたいのですが、上手くいきません。 5問の問題があり、1問が間違っていたら、乱数を使い1ケタへ。合っていたら2ケタへ。 乱数を使い、If文で1ケタは表示することは出来ますが、合っていたら2ケタに表示するというIf文かswitch文での処理が分かりません。 ヒントでも構いません。 だれか分かる方がいましたら、教えて頂けますでしょうか? 宜しくお願いします。

みんなの回答

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.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 だけで良い筈(前回の私の式も間違ってたけど)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

>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桁確定かな?) ですが、こう言ったことじゃない?

mai5891
質問者

補足

意味不明で言葉が足らず申し訳ありません。 以下、ソースです。 今の状態は、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

関連するQ&A

専門家に質問してみよう