VBAで単語テストを作ろう!初心者でもできる方法とは?

このQ&Aのポイント
  • VBAを使ってパソコンで英単語テストを作りたい初心者の方へのアドバイスです。
  • 具体的な作り方や構想を説明し、問題の表示や回答の入力、正誤判定などを実現する方法を解説します。
  • VBAの知識がなくても取り組めるように、手順を丁寧に説明します。
回答を見る
  • ベストアンサー

VBAで単語テストを作りたいんですが…

閲覧ありがとうございます。 弟が高校受験を控えているのですが、パソコンをいじってばかりで全く勉強をしようとしません。そこで、パソコンで出来る英単語テストをVisualBasicで作ろうと思い立ったのですが、出来上がるのは構想ばかりで初心者の私には難しくてプログラムの組みようがありませんでした。手も足も出ず困っています。どうか力をお貸しいただけたらと思います。 構想はこんな感じです・・・ ・ワークシート上に100問、英単語と対応する和訳を入れる。 ・ワークシート上に英単語表示欄と、回答入力欄を作る。 ・回答を入力し、答えあわせボタンをおす。正解しないと次へ進めない。(メッセージボックスで「誤りです」と表示させる) ・次問へのボタンをクリックすると新しい問題が表示される。(英単語は100問のうちからランダムに表示されるようにする) ・終了ボタンを押すと、100問中何問出来たかをワークシート上に表示させる。(50問で諦めた場合でも/100表記でかまいません) VBAしかわからないので、必ずVBAでお願いします。 多少難しくても、頑張りますのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

すみません、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)

回答No.4

もう1枚の画面を添付します。

annnaray
質問者

お礼

なんとか出来そうです! 丁寧な対応をしていただいて感謝しております。ありがとうございました!

回答No.2

試しに作ってみました。 こんな感じでどうでしょうか? (以下、添付のExcelを見てください) 「問題集」シートに和訳&単語を入力して保存します。 このシートの黄色い箇所は自動で使うので手を加えないでください。 問題数、正解数は自動集計されます。(行、列の削除はしないように) 問題数が100より多い場合は、VBAの処理で100に補正します。 次に、「テスト」シートで「開始」ボタンを押すと、自動でランダム和訳欄に問題が出ます。 回答欄に単語を入力し、「採点」で正解・不正解の判定をし、次の問題へ進みます。 すべて完了すると合計が採点されます。 途中、「中止」を押すと、途中までの実績で採点されます。

回答No.1

和訳を表示して英単語を入力させるテストではダメですかね? 和訳を入力させようとすると、漢字・ひらがなと区別が複雑なので作るのは難しいと思いますよ。 入力が英単語であれば、全角文字は半角に変換し、大文字は小文字に変換することはVBAで容易にできるので、変換後の英単語が正しいスペルかの判定はしやすいんじゃないかと。

annnaray
質問者

補足

そうですね…技術的にあんまり難しいものは作れないので、和訳→英単語でつくりたいです。よろしくお願いします。

関連するQ&A

  • excelで単語テストを作りたい

     PCにexcelが入っているものの全く使ったことのない初心者です。自分用に、手早く英単語の暗記テストを作りたいのですが、効率よく作れる方法、またはテンプレート等がありましたら紹介していただけると助かります。もちろん回答欄で答えられる内容ではないと思うので、参考URLを張っていただけるだけでかまいません。 ※単語テストは英単語をみて、よこに日本語訳を書くだけのいたってシンプルなものです。         英語       日本語      1 admit      認める      2 realize       悟る のような感じです。よろしくお願いします。

  • VBとExcelを使って英単語テストプログラムを作るには?

    英単語とその和訳をエクセルシートとして登録し、そこから和訳をランダムに出題して英単語を入力させる。正解なら正解、間違いなら間違いを表示して、新しい問題をランダムに出題させる・・・こんな単純?なプログラムを作成したいです。具体的なソースか、又は参考になるホームページを教えて下さい。よろしくお願いします。

  • Excel(VBA)について教えてください。

    VBAの初心者です。 宜しくお願いします ワークシートに貼り付けたトグルボタンを入力が出来ない状態にしたいのですが、よくわかりません。どなたか教えていただけないでしょうか? 私が理解している範囲は次の通りです。 1)LockedプロパティーをTrueにする。 2)コントロールの書式設定でロックする 3)ワークシートの保護をかける。 これで、トグルボタンの編集はロックできますが、入力自体がロック出来ません。 宜しくお願いいたします。

  • mac 英単語の単語登録

    mac で、グーグル日本語入力とことえりとを併用しています。 頻繁につかう単語を単語登録したいのですが、登録したいのは、長い英単語(英熟語?スペース、ハイフン等ふくむ)です。 普通に日本語入力で登録すると、表示に際して、その英単語が大文字で表示されてしまいます。 長いにもかかわらず、非常に繰り返し使う英単語なので、一部分だけを打ち込んだら全部が表示されるようにしたいのです。 その単語は、「 ◯◯ emond:◯◯.oeu kiki:jekkk」 (適当です) という形態で使うもので、この◯◯の中にはその時々に応じて英単語が入ります。 なので、これを表示させる際には、パソコンはだいたいアルファベット表示になっていますので、できれば、アルファベット入力で登録しておけたらなと思っています。 例えば、一旦登録しておけば、「じゅうしょ」と打ち込めば自分の住所を候補一覧に表示させることができますよね。 あれの英語入力版、ないしは、携帯の文字入力予測機能のようなものを期待しています。 良い方法を御存知の方がいらっしゃいましたら、どうぞよろしくお願いいたします。

    • 締切済み
    • Mac
  • Excel VBA-改行について

    Excel VBAで、UserFormのTextBoxに入力されたものをワークシートに表示させたいのですが、 TextBox内で、「Enter」キーが押されたら改行する方法と TextBoxで入力された通り(改行等)にワークシートのセルに表示する方法を どなたか教えて下さい。

  • VBAワーク シート名前を付けて作成

    エクセルVBAにて 原紙とゆう名前のワークシートをコピー処理して 入力フォームにテキストボックス1と2があり コピーした原紙とゆうワークシート名から テキストボックス1と2に入力した項目が 合わさってワークシート名に変更する方法はあるのでしょうか? 例)テキストボックス1に 123   テキストボックス2に 456 コマンドボタン1をクリックすることによって ワークシート名が123456となるようにしたいのですが? 宜しくお願いいたします。

  • VBAとスピンボタンの使い方

    VBAとスピンボタンの使い方 学校勤務で以下の画像のような、生徒名簿を管理しています。 画像上段が、生徒名簿の検索フォームで、シート1です。 画像下段が、生徒名簿のデータベースで、シート2です。 シート2の生徒のデータベースは今は、NO8までですが だいたいNO1000位まで入っています。 検索フォームで一行一行の生徒データを、表示 させているのですが、今、シート1のB3の生徒氏名欄に シート2から生徒名をコピペして、データを表示させているような感じです。 一つ一つコピペするのは時間もかかるので、何か1名でも生徒名を 入力すれば、あとはスピンボタンでスクロール表示する関数またはVBAを スピンボタンに登録したいのですが。 また、できればB列の最後の行になれば、また、最初の行に戻るような コードがいいのですが。 VBA初心者でよくわかりませんでしたので、よろしくお願いします。

  • エクセルvbaのフォームでエラーとなります

    ワークシートにIDと名前の対応表があります。 別のシートのA1に検索したいID欄、A2にVLOOKUP関数で結果を表示させています。 VBAの入力フォーム上で、あるIDを入れたときに前途のA1に数値を代入し、A2で得られた結果をフォーム上の欄で取得するようにしています。 この時、表の中に対応する番号と名前があればキチンと結果が出ますが、そもそもデータベースが無ければVBA自体がエラーとなってしまいます。 ワークシート上のVLOOKUPには近似値では困るのでFALSEを指定していますので、該当番号がなければここでの結果は#N/Aとなっています。 フォーム上で該当番号がなければ代わりの文字列、たとえば「なし」などを入力されるようにできるか、最低でもプロセスが中断される事がないようにしたいのですが、どのようにすれば可能でしょうか?

  • VBAエクセルのフォームについて

    お世話になっております。 VBAエクセルのフォームについて教えていただきたいのです。 VBAで入力のフォームを作ったのですが(TEXT BOXが4つ、コマンドボタン1つ、コマンドボタンを押したときに登録される用にしたい) 各シートの集計にしたい為、各シート(31のシートがあります)に入力フォームがあります、その各シートでの入力結果を1つのシートに 集計したいのですが、どの様なコードにしたらようか判りません。 素人のためお手数ですが、なるべく判りやすくお願いします。 よろしくお願いします。

  • VBAを入れる場所

    シートの非表示をVBAで実行したく(Excel2000) VBAのヘルプを見て Worksheets("Sheet1").Visible = False という式を見つけたのですが、どこに入力していいのかがわかりません。 質問内容をみていただいた通り、VBAに関しては全く知識がありません。 標準モジュールに入力してみたのですが、ダメでした。 (できれば、手順を詳しく教えてください) と、多分、上の式は、Sheet1を表示しなくするということだと思うのですが、 例えばSheet1とSheet3とか SHEET1からSheet4まで非表示にするとか というときには、どのように記述 したらよいのか、教えてください。 (Excelの機能でのシート非表示は知っています)