dポイントプレゼントキャンペーン実施中!

閲覧ありがとうございます。
弟が高校受験を控えているのですが、パソコンをいじってばかりで全く勉強をしようとしません。そこで、パソコンで出来る英単語テストをVisualBasicで作ろうと思い立ったのですが、出来上がるのは構想ばかりで初心者の私には難しくてプログラムの組みようがありませんでした。手も足も出ず困っています。どうか力をお貸しいただけたらと思います。

構想はこんな感じです・・・

・ワークシート上に100問、英単語と対応する和訳を入れる。
・ワークシート上に英単語表示欄と、回答入力欄を作る。
・回答を入力し、答えあわせボタンをおす。正解しないと次へ進めない。(メッセージボックスで「誤りです」と表示させる)
・次問へのボタンをクリックすると新しい問題が表示される。(英単語は100問のうちからランダムに表示されるようにする)
・終了ボタンを押すと、100問中何問出来たかをワークシート上に表示させる。(50問で諦めた場合でも/100表記でかまいません)

VBAしかわからないので、必ずVBAでお願いします。
多少難しくても、頑張りますのでよろしくお願いします。

A 回答 (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

-----------------------------------------------------
「VBAで単語テストを作りたいんですが…」の回答画像3
    • good
    • 0

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

「VBAで単語テストを作りたいんですが…」の回答画像4
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/29 17:21

試しに作ってみました。


こんな感じでどうでしょうか?
(以下、添付のExcelを見てください)

「問題集」シートに和訳&単語を入力して保存します。
このシートの黄色い箇所は自動で使うので手を加えないでください。
問題数、正解数は自動集計されます。(行、列の削除はしないように)
問題数が100より多い場合は、VBAの処理で100に補正します。

次に、「テスト」シートで「開始」ボタンを押すと、自動でランダム和訳欄に問題が出ます。
回答欄に単語を入力し、「採点」で正解・不正解の判定をし、次の問題へ進みます。
すべて完了すると合計が採点されます。
途中、「中止」を押すと、途中までの実績で採点されます。
    • good
    • 0

和訳を表示して英単語を入力させるテストではダメですかね?


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

この回答への補足

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

補足日時:2010/01/28 19:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!