エクセルのマクロを使って、一桁の数字の四則演算の問題作成
わり算は、回答が難しくなるので、「+」「-」「×」のみ使用するようにしています。
「スタート」ボタン押下で回答を開始、「終わり」ボタン押下で終了し、答え合わせとタイムを表示するプログラミングとなります。
「スタート」の処理

処理内容
スタートボタンが押下されたら?
- タイマーの開始
- 1~10の数値をランダムに発生させ、計算する数字をセットしていく、演算子も同様に1~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での指定で入力エリアを選択して入力できるようにしています。

終わりボタンが押されたら?
- タイマーを停止して、時間を表示する
- 入力された値と実際の計算結果とを比較して、「〇」「×」を表示する。
- 点数を計算して表示する。
終わりボタンのプログラムは?
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であれば、コピペ作成も可能ですし、必要に応じて、少し変更するなど、作れば作るだけ、引き出しが増えていきます。

