Windows7(32ビット) の環境でExcel2010 VBAを使って下記のような
e-learningの問題を作りたいと思っていますので、どなたかお分かりになる方、
ご教示よろしくお願いいたします。
もしくはExcel VBAでe-learning用に作られたプログラムで参考にできる
サイトがあれば教えてください。
例)
問題文の空欄に、選択肢から適切な英単語を選んで英文を完成させなさい。
(問題文)
An artifical intelligence program has defeated its human ( ) ( ) ( )
( ) ( ) in the ancient board game of "go".
(訳)
人口知能のプログラムが人間の対戦相手を、古来のボードゲームである囲碁の5番勝負において破りました。
■選択肢
in, a, opponent, series, five-game
ボタン:[採点]
1)利用者にマウスクリックで英単語を選択させる。
2)英文の空欄に選択された単語が入る。
3)採点ボタンを押すと正解を点数(1~5)で表示する。
このような動作を想定しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
ご自分で「どこまではできた」けれど「どこで詰まった」という情報がまったくなく、「もしくはサイト紹介」の記載がなければある意味丸投げの質問でしたので、本来コード提示はすべきではないのでしょうが。。。
「括弧の穴埋め問題」という部分に興味がわいてしまいましたので、そこだけ簡単なものを作ってみました。
ユーザーフォームにラベル(lblQ)とボタン6個(cmdParts1~6)を配置している前提です。
VBA
1Option Explicit 2 3'問題番号 4Dim piNo As Integer 5'正答 6Dim psTrue() As String 7Dim piTrueCnt As Integer 8'回答候補(6個まで) 9Dim psParts(6) As String 10Dim piPartsCnt As Integer 11'回答入力 12Dim piAns() As Integer 13Dim piAnsCnt As Integer 14 15Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 16 '初期化 17 Call Init 18 '現在の問題を再表示 19 Call LoadQ 20End Sub 21 22Private Sub UserForm_Initialize() 23 '初期化 24 Call Init 25 '最初の問題を表示 26 piNo = 1 27 Call LoadQ 28 29End Sub 30 31Private Sub Init() 32 '初期化 33 lblQ.Caption = "" 34 cmdParts1.Caption = "" 35 cmdParts2.Caption = "" 36 cmdParts3.Caption = "" 37 cmdParts4.Caption = "" 38 cmdParts5.Caption = "" 39 cmdParts6.Caption = "" 40 41 cmdParts1.Enabled = True 42 cmdParts2.Enabled = True 43 cmdParts3.Enabled = True 44 cmdParts4.Enabled = True 45 cmdParts5.Enabled = True 46 cmdParts6.Enabled = True 47 48 cmdParts1.Visible = False 49 cmdParts2.Visible = False 50 cmdParts3.Visible = False 51 cmdParts4.Visible = False 52 cmdParts5.Visible = False 53 cmdParts6.Visible = False 54 55 Dim i As Integer 56 For i = 0 To UBound(psParts) 57 psParts(i) = "" 58 Next 59 piPartsCnt = 0 60 61End Sub 62 63Private Sub NextQ() 64 '次の問題を表示 65 piNo = piNo + 1 66 Call LoadQ 67End Sub 68 69Private Sub LoadQ() 70 71 If Cells(piNo + 1, 1) = "" Then 72 '問題番号がなければ終了 73 MsgBox "終了です" 74 End 75 End If 76 77 Call Init 78 79 '正答取得 (例:"3,1,4,5,2" ⇒ 要素数5この配列を作成) 80 psTrue = Split(Cells(piNo + 1, 3), ",") 81 piTrueCnt = UBound(psTrue) + 1 82 83 '入力回答の初期化 84 ReDim piAns(piTrueCnt) 85 Dim i As Integer 86 For i = 0 To UBound(piAns) 87 piAns(i) = 0 88 Next 89 piAnsCnt = 0 90 91 '回答候補取得(最大6個) 92 Dim iCol As Integer 93 piPartsCnt = 0 94 For iCol = 4 To 9 95 If Cells(piNo + 1, iCol) = "" Then 96 Exit For 97 End If 98 psParts(piPartsCnt) = Cells(piNo + 1, iCol) 99 piPartsCnt = piPartsCnt + 1 100 Next 101 102 '問題文表示 103 Call DispQ 104 105 'ボタンに回答候補を表示 106 cmdParts1.Caption = psParts(0) 107 cmdParts2.Caption = psParts(1) 108 cmdParts3.Caption = psParts(2) 109 cmdParts4.Caption = psParts(3) 110 cmdParts5.Caption = psParts(4) 111 cmdParts6.Caption = psParts(5) 112 113 '使うボタンだけ表示 114 If piPartsCnt >= 1 Then cmdParts1.Visible = True 115 If piPartsCnt >= 2 Then cmdParts2.Visible = True 116 If piPartsCnt >= 3 Then cmdParts3.Visible = True 117 If piPartsCnt >= 4 Then cmdParts4.Visible = True 118 If piPartsCnt >= 5 Then cmdParts5.Visible = True 119 If piPartsCnt >= 6 Then cmdParts6.Visible = True 120 121End Sub 122 123Private Sub DispQ() 124 '問題文を画面に表示 125 Dim strText As String 126 Dim i As Integer 127 Dim strAns As String 128 '問題文取得 129 strText = Cells(piNo + 1, 2) '例:「あい{1}うえ{2}{3}おかき」⇒「あい()うえ()()おかき」 130 For i = 1 To piTrueCnt 131 strAns = "" 132 '回答入力済みの場合は括弧内に記入 133 If piAns(i) > 0 Then strAns = psParts(piAns(i) - 1) 134 strText = Replace(strText, "{" & CStr(i) & "}", "( " & strAns & " )") 135 Next 136 137 lblQ.Caption = strText 138 139End Sub 140 141Private Sub cmdParts1_Click() 142 Call subAnsAdd(1) 143 cmdParts1.Enabled = False 144End Sub 145Private Sub cmdParts2_Click() 146 Call subAnsAdd(2) 147 cmdParts2.Enabled = False 148End Sub 149Private Sub cmdParts3_Click() 150 Call subAnsAdd(3) 151 cmdParts3.Enabled = False 152End Sub 153Private Sub cmdParts4_Click() 154 Call subAnsAdd(4) 155 cmdParts4.Enabled = False 156End Sub 157Private Sub cmdParts5_Click() 158 Call subAnsAdd(5) 159 cmdParts5.Enabled = False 160End Sub 161Private Sub cmdParts6_Click() 162 Call subAnsAdd(6) 163 cmdParts6.Enabled = False 164End Sub 165 166Private Sub subAnsAdd(iNo As Integer) 167 '入力した回答候補番号を格納 168 piAnsCnt = piAnsCnt + 1 169 piAns(piAnsCnt) = iNo 170 '画面再表示 171 Call DispQ 172End Sub
問題文はシートから取得するようになっています。
どう記載すれば取得できるのかはコード上にヒントも書いてありますので、頑張って解析してみてください。
投稿2016/03/29 03:46
総合スコア3013
0
全画面表示にしてやると、見た目が良くなると
思います。
http://www.vba-ie.net/sp/operation/windowsfullscreen.html
また、触らないで欲しいところは
保護をかけておくとさらににe-learingみたいになってきます。
投稿2016/03/25 10:22
総合スコア25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
探したら出てきましたが、イメージはこんな感じでしょうか。
(ソース自体はあまり参考にならなさそうですが・・)
簡単にこんな仕様だと思います。
・問題データはシートで保持する
・問題データには答え、選択肢が紐づく
・シートにより、問題の種類が異なり、ユーザは問題の種類を選ぶことができる
VBA クイズ
VBA 4択
等で検索するといろいろ出てくると思います。
投稿2016/03/25 06:39
編集2016/03/25 06:42総合スコア249
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 07:32
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 07:31