- ベストアンサー
VBAで単語テストを作ろう!初心者でもできる方法とは?
- VBAを使ってパソコンで英単語テストを作りたい初心者の方へのアドバイスです。
- 具体的な作り方や構想を説明し、問題の表示や回答の入力、正誤判定などを実現する方法を解説します。
- VBAの知識がなくても取り組めるように、手順を丁寧に説明します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すみません、Excelブックは回答に添付できないんですね・・ ですので、VBのマクロスクリプト部分を記載し、Excelの画面を添付します。 ----------------------------------------------------- Dim nQuestions Dim nTarget Dim nWaitFlag Dim nResult(100) ' -1=未実施/0=不正解/1=正解 Dim nCount ' 「開始」ボタン押下処理 Private Sub Button_Start_Click() Dim nLoop1 ' 登録されている問題数の取得 nQuestions = Worksheets("問題集").Cells(1, 2).Value ' 問題数が 100 問以上の場合は、上限の 100 に補正 If nQuestions > 100 Then nQuestions = 100 End If ' ボタンの有効&無効化 Button_Start.Enabled = False Button_Stop.Enabled = True Button_Saiten.Enabled = True ' テスト結果の初期化 For nLoop1 = 0 To nQuestions - 1 nResult(nLoop1) = -1 Worksheets("問題集").Cells(3 + nLoop1, 4).Value = -1 Next ' 終了問題数のクリア nCount = 0 ' 問題を出題する Mondai End Sub ' 「中止」ボタン押下処理 Private Sub Button_Stop_Click() MsgBox ("テストが途中で終了しました" & vbCrLf & "点数は " & Worksheets("問題集").Cells(2, 2).Value & " / " & Worksheets("問題集").Cells(1, 2).Value & " 点です") Button_Start.Enabled = True Button_Stop.Enabled = False Button_Saiten.Enabled = False End Sub ' 「採点」ボタン押下処理 Private Sub Button_Saiten_Click() Dim strAnswer Dim strInput ' 待機フラグを False にする nWaitFlag = False ' 回答をセルから取得して半角&小文字に変換 strAnswer = StrConv(StrConv(Worksheets("問題集").Cells(3 + nTarget, 3).Value, vbNarrow), vbLowerCase) ' 入力値をフォームから取得して半角&小文字に変換 strInput = StrConv(StrConv(TextBox_Kotae.Value, vbNarrow), vbLowerCase) If strAnswer = strInput Then Worksheets("問題集").Cells(3 + nTarget, 4).Value = 1 nResult(nTarget) = 1 MsgBox ("正解!") Else Worksheets("問題集").Cells(3 + nTarget, 4).Value = 0 nResult(nTarget) = 0 MsgBox ("不正解!") End If If nCount >= nQuestions Then MsgBox ("すべての問題が終了しました" & vbCrLf & "点数は " & Worksheets("問題集").Cells(2, 2).Value & " / " & Worksheets("問題集").Cells(1, 2).Value & " 点です") ' ボタンの有効&無効化 Button_Start.Enabled = True Button_Stop.Enabled = False Button_Saiten.Enabled = False Else Mondai End If End Sub ' 問題を1問出題する処理 Private Sub Mondai() If nCount >= nQuestions Then Else ' 実施問題数のカウントアップ nCount = nCount + 1 ' 待機フラグの初期化 nWaitFlag = True ' 問題をランダムに選出(すでに終了済み問題の場合は再度乱数発生) Do nTarget = Int(Rnd * nQuestions) Loop Until nResult(nTarget) = -1 ' 問題欄に和訳を表示 TextBox_Wayaku.Value = Worksheets("問題集").Cells(3 + nTarget, 2).Value ' 回答欄を初期化する TextBox_Kotae.Value = "" End If End Sub Private Sub Label2_Click() End Sub Private Sub TextBox_Wayaku_Change() End Sub Private Sub TextBox_Kotae_Change() End Sub -----------------------------------------------------
その他の回答 (3)
- wakaba2010
- ベストアンサー率47% (63/134)
- wakaba2010
- ベストアンサー率47% (63/134)
試しに作ってみました。 こんな感じでどうでしょうか? (以下、添付のExcelを見てください) 「問題集」シートに和訳&単語を入力して保存します。 このシートの黄色い箇所は自動で使うので手を加えないでください。 問題数、正解数は自動集計されます。(行、列の削除はしないように) 問題数が100より多い場合は、VBAの処理で100に補正します。 次に、「テスト」シートで「開始」ボタンを押すと、自動でランダム和訳欄に問題が出ます。 回答欄に単語を入力し、「採点」で正解・不正解の判定をし、次の問題へ進みます。 すべて完了すると合計が採点されます。 途中、「中止」を押すと、途中までの実績で採点されます。
- wakaba2010
- ベストアンサー率47% (63/134)
和訳を表示して英単語を入力させるテストではダメですかね? 和訳を入力させようとすると、漢字・ひらがなと区別が複雑なので作るのは難しいと思いますよ。 入力が英単語であれば、全角文字は半角に変換し、大文字は小文字に変換することはVBAで容易にできるので、変換後の英単語が正しいスペルかの判定はしやすいんじゃないかと。
補足
そうですね…技術的にあんまり難しいものは作れないので、和訳→英単語でつくりたいです。よろしくお願いします。
お礼
なんとか出来そうです! 丁寧な対応をしていただいて感謝しております。ありがとうございました!