脳トレ問題をExcel「エクセル」で作ってみた!!

この記事は約4分で読めます。

エクセルのマクロを使って、一桁の数字の四則演算の問題作成

わり算は、回答が難しくなるので、「+」「-」「×」のみ使用するようにしています。

「スタート」ボタン押下で回答を開始、「終わり」ボタン押下で終了し、答え合わせとタイムを表示するプログラミングとなります。

「スタート」の処理

エクセルで作った脳トレ問題~スタート時~
エクセルで作った脳トレ問題~スタート時~

処理内容

スタートボタンが押下されたら?

  1. タイマーの開始
  2. 1~10の数値をランダムに発生させ、計算する数字をセットしていく、演算子も同様に1~3の数値で、演算子を決める
  3. 終わったら、入力エリアの選択する。

入力がしやすいように、最後に選択エリアを範囲選択しています。
Excelでは、選ばれた選択範囲で繰り返し移動できます。

スタートボタンのプログラムは?

    Range("時間").Value = ""
    t1 = Now

    For i = 0 To 9
        Cells(2 + i, 5).Value = ""
        Cells(2 + i, 6).Value = ""
        Cells(2 + i, 1).Value = Rand(10, 1)
        Cells(2 + i, 3).Value = Rand(10, 1)
    
        Select Case Rand(3, 1)
            Case 1: Cells(2 + i, 2).Value = "+"
            Case 2: Cells(2 + i, 2).Value = "-"
            Case 3: Cells(2 + i, 2).Value = "×"
            Case 4: Cells(2 + i, 2).Value = "÷"
        End Select
        Cells(2 + i, 4).Value = "="
    
    Next i
    
    Range("E2:E11").Select

Range(“時間”)は、タイマーの表示箇所の名前です。
Rand関数は、乱数発生の関数を作っています。いろいろなサイトで紹介されていますので、ここでは、紹介のみで、説明はしません。

実際には、「÷」は出てきませんが、何かしら方法があれば、2桁の計算などで使えるかも知れないのでそのままにしています。

最後のRangeでの指定で入力エリアを選択して入力できるようにしています。

エクセルで作った脳トレ問題~終わり~
エクセルで作った脳トレ問題~終わり~

終わりボタンが押されたら?

  1. タイマーを停止して、時間を表示する
  2. 入力された値と実際の計算結果とを比較して、「〇」「×」を表示する。
  3. 点数を計算して表示する。

終わりボタンのプログラムは?

    Dim a As Integer
    Dim b As Integer
    Dim ans As Integer

    t2 = Now

    For i = 0 To 9
        a = Cells(2 + i, 1).Value
        b = Cells(2 + i, 3).Value
    
        Select Case Cells(2 + i, 2)
        
            Case "+": ans = a + b
            Case "-": ans = a - b
            Case "×": ans = a * b    
        End Select
    
        If ans = Cells(2 + i, 5) Then
            Cells(2 + i, 6) = "〇"
        Else
            Cells(2 + i, 6) = "×"
        End If
    Next i
    
    Range("時間").Value = t2 - t1

演算子によっての分岐、計算結果の判定をしています。
「〇」「×」の数は、シート側で、COUNTIF関数を使って出しています。

Rand関数は?どこかのサイトからのコピペで作成した物を使いまわしています。
使っているのは、こんな感じです。

Public Function Rand(iMax As Integer, iMin As Integer) As Integer

    '// 疑似乱数列初期化
    Call Randomize
    
    '// 最大値~最小値の範囲の乱数を取得
    Rand = Int((iMax - iMin + 1) * Rnd + iMin)

End Function

プログラミングの利点の一つに、自作した関数を保存しておくと、使いまわしができることです。
エクセルのVBAであれば、コピペ作成も可能ですし、必要に応じて、少し変更するなど、作れば作るだけ、引き出しが増えていきます。

タイトルとURLをコピーしました