【Excel】エクセルのフラッシュカードの作り方(ランダム)【アプリ:暗算】 | モアイライフ(more E life)
EXCEL作成代行・自動化サービス開始(^^)/

EXCEL作成代行・お悩み解決・関数や数式の追加・グラフ作成大量データの一括加工などお任せください!

→面倒・難しい作業を丸投げする♪

【Excel】エクセルのフラッシュカードの作り方(ランダム)【アプリ:暗算】

Excelのスキルアップ
本サイトでは記事内に広告が含まれています

この記事では、数字をランダムに表示し、全ての数字の合計を当てる「フラッシュ暗算」アプリをエクセルのVBAを使って作る方法を解説します。

 

スポンサーリンク

エクセルのフラッシュカードの作り方(ランダム)1【完成形の確認】

まずはこれから作るフラッシュ暗算アプリがどのようなものなのか確認しましょう。

フラッシュの速さを「速い」「普通」「遅い」から選べるようになっており、計算する回数には好きな数を入力できます。

A列は処理で使用するため、非表示となっていることに注意してください。

フラッシュの速さと計算する回数を入力してSTARTボタンを押すと、C2セルに1~10の数字がランダムに表示されます。

指定した回数分の数字を表示し終わると、回答を入力するメッセージボックスが表示されます。

回答を入力し、OKボタンを押しましょう。

回答が正解の場合は「正解!」と書かれたメッセージボックスが表示されます。

回答が不正解の場合は「残念!正解は○です。」と書かれたメッセージボックスが表示されます。

フラッシュの速さを入力しないままSTARTボタンを押すと、「フラッシュの速さを選択してください」と書かれたメッセージボックスを表示します。

計算する回数が未入力の場合も同様です。

また、計算する回数については、数字以外を入力してSTARTボタンを押した場合もエラーメッセージを表示するようにしています。

下記のコードで実装しています。


Sub flash()

Dim speed
Dim forNum
Dim i, j
Dim rndNum, sum
Dim userAnswer As Variant

speed = 0
rndNum = 0
sum = 0
userAnswer = 0

'数が表示されるセルを初期化
Range("C2") = ""

'フラッシュの速さが選択されていない場合は処理終了
If Range("C5").Value = "" Then
MsgBox "フラッシュの速さを選択してください", vbCritical
Exit Sub
End If

'選択された速さを保持
If Range("C5").Value = "速い" Then
speed = 500
End If
If Range("C5").Value = "普通" Then
speed = 1000
End If
If Range("C5").Value = "遅い" Then
speed = 1500
End If

'計算回数が入力されていない場合は処理終了
If Range("E5").Value = "" Then
MsgBox "計算する回数を入力してください", vbCritical
Exit Sub
End If

'計算回数に入力されている値が数値でない場合は処理終了
forNum = Range("E5").Value
If IsNumeric(forNum) = False Then
MsgBox "計算回数は数値で入力してください", vbCritical
Exit Sub
End If

For i = 1 To forNum
'乱数初期化
Randomize

'1から10までのランダムな整数を作成
rndNum = Int(Rnd() * 10 + 1)

'セルに表示
Range("C2") = rndNum

'合計を保持
sum = sum + rndNum

'空ループで速さを調節
For j = 0 To speed - 1
j = j + 1
Range("A1") = j
Range("A1") = ""
Next j

For j = 0 To speed - 1
j = j + 1
Range("C2") = ""
Next j

Next i

'数値入力のみ許可
userAnswer = Application.InputBox(Prompt:="答えを入力してください", Title:="回答", Type:=1)

'キャンセルボタン、Xボタンで閉じた場合
If userAnswer = False Then
MsgBox "入力がキャンセルされました。", vbInformation
Exit Sub
End If

If Abs(sum - userAnswer) < 0.1 Then
MsgBox "正解!", vbInformation
Else
MsgBox "残念!正解は" & Str(sum) & "です。", vbInformation
End If

End Sub

エクセルのフラッシュカードの作り方(ランダム)2【ランダムな数字を選択された速さで入力された回数分表示する】

それではコードについて詳しく見ていきましょう。

まずは、フラッシュの速さが選択されているかどうかを判定します。

 

選択されていない場合はエラーメッセージを表示して処理を終了します。

選択されている場合は、速さに応じて数値を設定します。この数値は後でループ処理に使う数値となります。

次に、計算回数が入力されていない場合のエラー処理を実装します。

計算回数が数字でない場合のエラー処理も併せて実装しておきます。

For文を使って、入力された回数分処理をループします。

ループ内ではまず、乱数を初期化します。

これによって、プログラムを実行するたびに同じ乱数列が生成されることを防止しています。

次に、1から10までのランダムな整数を作成します。

Rnd()が0以上1未満の単精度浮動小数点型乱数(例: 0.1234567)を返すため、10倍することで、0以上10未満の乱数になります。

1から10までの整数を得るために、+1して、1以上11未満の乱数を得るようにします。

Int()は引数の整数部分を返すため、1以上11未満の乱数を引数に設定することで、1から10までのランダムな整数を作成することができます。

作成した数をセルに表示し、合計値として保持します。

その後、選択された速さに応じた回数分ループ処理を行うことで、速さの調整を行っています。

ループ処理の回数が多くても人間の目には認識できない速さで終わってしまいますが、比較的時間の掛かる処理であるセルへの書き込みを行うことで調整しています。

 

 

エクセルのフラッシュカードの作り方(ランダム)3【回答の確認】

数字の表示が終わったら、「答えを入力してください」というメッセージボックスを表示します。

InputBox()のType引数に1を指定すると、数値以外の入力があった場合にExcelが自動的に警告を表示し、再入力を促すことができます。

メッセージボックスがキャンセルボタン、×ボタンで閉じられた場合の処理を追加します。

回答を確認し、メッセージボックスを表示します。

「合計 – 入力された回答の絶対値が0の場合」という条件で判定を行っています。

 

まとめ フラッシュ暗算をエクセルのVBAを使って作る方法

この記事では、数字をランダムに表示し、全ての数字の合計を当てる「フラッシュ暗算」アプリをエクセルのVBAを使って作る方法を解説しました。

速さごとに設定する数値を変えれば、よりスピードの速いフラッシュ暗算を試すこともできます。
10以上の整数も表示されるようにしても面白いかもしれませんね。

解説したコードを理解して、自分なりに改良できるようになりましょう。

コメント

スポンサーリンク
タイトルとURLをコピーしました