VBA100本ノック 41本目:暗算練習アプリ

こちらで公開されている、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

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。