エクセルのマクロを使って、一桁の数字の四則演算の問題作成
わり算は、回答が難しくなるので、「+」「-」「×」のみ使用するようにしています。
「スタート」ボタン押下で回答を開始、「終わり」ボタン押下で終了し、答え合わせとタイムを表示するプログラミングとなります。
「スタート」の処理
処理内容
スタートボタンが押下されたら?
- タイマーの開始
- 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であれば、コピペ作成も可能ですし、必要に応じて、少し変更するなど、作れば作るだけ、引き出しが増えていきます。