[VBA] Quiz プログラムを作ってみたよ!

 ふい~。何だかここ数日色々なことがあって大変でした。
 こばとが泣いたり、怒ったり、まさに修羅場でしたよ。
 何があったか知りたい人は こばとの英語ノート を読んでくださいな。
 そんなわけで、つい先日、姉が 伝説の指輪の封印を解いてみた のですが ...... やっぱりまだまだ面倒事が起こりそうです。まあ、何はともあれ日常生活が戻りつつあるので、また楽しく VBA のお話をしましょ~。

VBA で Quiz マクロを作ってみたよ!

 ところで皆さん、クイズ は好きですか?
 いきなりこんなこと訊かれても、よほどのクイズ好き以外は返答に困るでしょうけど、取り立てて「嫌い!」て言う人もあまりいないと思うので、「こういうマクロも簡単にできちゃうんだね~」ぐらいの気分で軽く読み流してくださいな。問題は全て VBA に関するものです。中には少し難しいな問題もあるので、全部正解したら中級以上だと思いますよ。とりあえず、クイズのマクロ はこんなふうになります。

 Option Base 1

 'Sub Quiz()

 Dim i As Integer
 Dim q(5) As String
 Dim a(5) As String
 Dim mystr(5) As String

 q(1) = "値が日付かどうかをチェックするのは(  )関数"
 q(2) = "配列のインデックス番号の下限値を参照するのは(  )関数"
 q(3) = "値渡しで引数を渡すときは(  )キーワード"
 q(4) = "グラフの種類を変更するのは(  )プロパティ"
 q(5) = "テキストファイルを開くのは(  )メソッド"

 a(1) = "IsDate"
 a(2) = "LBound"
 a(3) = "ByVal"
 a(4) = "ChartType"
 a(5) = "OpenText"

 ct = 0

 For i = 1 To 5

 'ユーザーさんに答えを入力してもらいます
 'ただし大文字・小文字は区別しません
 mystr(i) = InputBox(q(i))

 '入力された文字が解答と同じであれば
 If StrComp(a(i), mystr(i), 1) = 0 Then

 '正解数に 1 を加えます
 ct = ct + 1

 MsgBox "正解です!"

 Else

 MsgBox "残念!"

 End If

 Next i

 '全部で何問正解したかを表示します
 MsgBox ct & "問正解です"

 End Sub

 全部で 5 つの問題 q(i) と解答 a(i)、ユーザーさんの入力した解答 mystr(i) を全て配列に入れておいて、a(i) と mystr(i) が等しければ「正解です!」、違っていれば「残念!」と表示されます。その文字列を比較するときに StrComp という少し難しい関数を使っています。というのは、

If a(i) = mystr(i) Then

というように書いてしまうと、大文字と小文字を違うものとして区別してしまいます。このような比較モードを Bynaryモードとよびます。たとえば "IsDate" が正解であるところを、ユーザーさんが "isdate" と入力すると「間違いです!」と判定されてしまうのです。でも VBE (Visual Basic Editor) のコードウィンドウでは小文字で入力したって、大文字にすべきところは自動で大文字に変えてくれるのですから、"isdate" だって正解にしたいところです。さもないと、ユーザーさんが「なんだ、このプログラムは!?」と怒ってしまいます。そこで大文字と小文字を同じものとして扱うために、Textモードで比較する必要があるのですが、そのときに使用するのが StrComp関数なのです。StrComp関数は

StrComp(文字列1, 文字列2 [, 比較モード])

という形式で記述し、[比較モード] に「 1 」を指定すると Textモードで文字列を比較し、等しい場合に 0 を返します。上のマクロでは

StrComp(a(i), mystr(i), 1)

と記述して、配列 a(i) と mystr(i) に入っている文字列を Textモードで比較しているわけです。StrComp関数については近いうちに別の記事で書く予定だから、そちらも参考にしてくださいな~。

 ≫ VBA 辞典メニューに戻って他の記事も読んでくださいな~♪

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)