こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
今回は、プログラムを考えるよりむしろ、「暗算できる範囲で」という
ところに時間が掛かったかも。
Sub VBA_100Knock_41() ' 計算用変数。A [+-*/] B = C Dim A As Long Dim B As Long Dim C As Long ' 演算子。 Dim D(1 To 4) As String D(1) = "+" D(2) = "-" D(3) = "×" D(4) = "÷" ' ループインデックス。 Dim i As Long ' ランダムに選択された演算子インデックス。 Dim j As Long ' 計算式。 Dim Eq As String ' 解答。 Dim Ans As Long ' 正答数。 Dim CorrectAnsNum As Long For i = 1 To 10 ' A,B共に1~20までとする(暗算できそうな数)。 ' 0で除算するとエラーになるので、0は除く。 A = WorksheetFunction.RandBetween(1, 20) B = WorksheetFunction.RandBetween(1, 20) j = WorksheetFunction.RandBetween(1, 4) Select Case j Case 1: C = A + B Case 2: ' 答えが0になる場合、再設定(簡単すぎるので)。 C = A - B If C = 0 Then A = A + WorksheetFunction.RandBetween(1, 20) C = A - B End If Case 3: C = A * B Case 4 A = A - (A Mod B) If A = 0 Then A = WorksheetFunction.RandBetween(2, 10) * B C = A / B End Select ' 計算式生成。 Eq = A & D(j) & B ' InputBox表示。 Ans = Application.InputBox(i & "問目" & vbNewLine & vbNewLine & Eq, "暗算練習", , , , , , 1) ' 正答数のカウントアップ。※Trueが-1であることを利用。 CorrectAnsNum = CorrectAnsNum - (C = Ans) Next If CorrectAnsNum <= 5 Then MsgBox "不可:" & CorrectAnsNum & "点" & vbNewLine & vbNewLine & _ "もう少し頑張りましょう!" ElseIf CorrectAnsNum <= 7 Then MsgBox "可:" & CorrectAnsNum & "点" & vbNewLine & vbNewLine & _ "あなたはまだまだ頑張れるはず!" ElseIf CorrectAnsNum <= 9 Then MsgBox "良:" & CorrectAnsNum & "点" & vbNewLine & vbNewLine & _ "素晴らしい!あと一歩!" Else MsgBox "優:" & CorrectAnsNum & "点" & vbNewLine & vbNewLine & _ "完璧です!" End If End Sub
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。