VBAを勉強するために作ったクイズゲームを紹介!

この記事のアイキャッチ プログラミング

前職ではシステムエンジニア兼プログラマとして働いておりました。そのとき配属されたプロジェクトで「Access VBA」を用いた開発を行うことに。調べてみたところ、「Access VBA」も「Excel VBA」もコーディング上の違いはそこまで無いと分かり、自宅では「Excel VBA」で勉強しておりました。

そして、勉強するからには楽しくやりたいし、目標となるものがあるといいと考えてクイズゲームを作ることにしました。本記事はその時に作ったクイズゲームを紹介します。

ゲーム概要

仕様は本当にシンプルな4択のクイズゲームです。

画面は

  • タイトル画面
  • 問題を選択する画面
  • 解答画面

の3つだけです。

エクセルのシートに「問題のタイトル」、「問題」、「解答」、「解答番号」を格納しており、その内容を画面に表示しております。

実のところ、見た目はネットに上がっていたVBAで作られたクイズゲームを真似しております。ですが、オリジナリティを出すために「タイトル画面」と「問題を選択する画面」は自分で考えて足してみました。

実際に動かしてみた様子

実際にゲームを動かしてみた様子をざっくりと録画してみました。

VBAで作ったクイズゲーム!

操作内容はざっくり

  • タイトル画面から「スタートボタン」を押してログイン
  • 問題を選択しなかったときにエラーメッセージを表示
  • 問題を選択して解答画面に遷移
  • 数問適当に解答後、問題選択画面にわざと戻る
  • もう一度問題を選択して解答画面に遷移
  • すべての問題に解答して結果を表示

です。

音楽問題に趣味が入っており癖が凄いのはご了承ください、、、(汗)

ソースコード

各画面のソースコードです。

変数名を日本語にしている理由は、前職で親しかった上司の影響と自宅で勉強するぶんには日本語のほうが個人的に見やすいからです。

もちろん、仕事でプログラミングするときはしっかり英語で書いてますよ!(笑)

タイトル画面

Option Explicit

'タイトル画面
Private Sub スタートボタン_Click()

    '問題を選択する画面を開く
    Call 問題を選択する画面.問題画面表示
    問題を選択する画面.Show
    
End Sub

問題を選択する画面

Option Explicit

'「問題タイトル」シートから問題タイトルを取得して表示
Public Sub 問題画面表示()

    Dim 問題一覧 As Worksheet
    Set 問題一覧 = Worksheets("問題タイトル")
    
    '問題数カウンタ:「問題タイトル」シートの問題数
    Dim 問題数カウンタ As Integer
    問題数カウンタ = 4
    
    '「問題タイトル」シートのB列の4行目の値からスタートし、
    'セルが空になるまでループ
    Do Until Cells(問題数カウンタ, 2) = ""
        問題リスト.AddItem 問題一覧.Cells(問題数カウンタ, 2).Value
        問題数カウンタ = 問題数カウンタ + 1
    Loop
    
End Sub

'選択された問題を変数に格納して、解答画面に渡す
'もし選択されていない場合は、メッセージボックスでエラーメッセージを表示
Private Sub 解答スタート_Click()
    
    '問題が選択されているか判定
    If 問題リスト.Text = "" Then
        MsgBox "問題を選択してください"
        Exit Sub
    End If
    
    '解答画面に「問題タイトル」を引数として渡す。
    Call 解答画面.解答画面初期値設定(問題リスト.Value)
    Call 解答画面.画面表示(問題リスト.Value)
    解答画面.Show

End Sub

解答画面

Option Explicit

'現在何問目かを格納。この変数を+1していくことで次の問題を表示させる
Private m_何問目 As Integer
'正解数を格納
Private m_正解数 As Integer
'総問題数を格納
Private m_総問題数 As Integer
'正解番号を格納
Private m_正解番号 As String
'問題タイトルを格納
Private m_問題タイトル As String

'初期値を設定する
Public Function 解答画面初期値設定(ByVal 問題名 As String)

    m_何問目 = 4
    
    '総問題数を取得
    'データベースシートをセットする
    Dim 問題シート As Worksheet
    Set 問題シート = Worksheets(問題名)
    
    m_総問題数 = 問題シート.Cells(4, 1).End(xlDown).Row

End Function

Public Function 画面表示(ByVal 問題名 As String)
    
    m_問題タイトル = 問題名
    
    'タイトルを表示
    Me.問題タイトル出力 = 問題名
    
    '総問題数を表示
    Me.総問題数出力 = m_総問題数 - 3 & "問"
    
    '現在何問目かを表示
    Me.現在問題数出力 = m_何問目 - 3 & "問目"
    
    '正解数を表示
    Me.正解数出力 = m_正解数 & "問"
    
    'データベースシートをセットする
    Dim 問題シート As Worksheet
    Set 問題シート = Worksheets(問題名)
       
    '問題を表示
    Me.問題文_テキストボックス.Value = 問題シート.Cells(m_何問目, 2).Value
    
    '解答を表示
    Me.解答1.Caption = 問題シート.Cells(m_何問目, 3).Value
    Me.解答2.Caption = 問題シート.Cells(m_何問目, 4).Value
    Me.解答3.Caption = 問題シート.Cells(m_何問目, 5).Value
    Me.解答4.Caption = 問題シート.Cells(m_何問目, 6).Value
    
    '正解を格納
    m_正解番号 = 問題シート.Cells(m_何問目, 7).Value

End Function

'解答番号を送る
Private Sub 解答1_Click()
    Call 正誤判定("1")
End Sub

Private Sub 解答2_Click()
    Call 正誤判定("2")
End Sub

Private Sub 解答3_Click()
    Call 正誤判定("3")
End Sub

Private Sub 解答4_Click()
    Call 正誤判定("4")
End Sub

'正誤判定
Private Sub 正誤判定(ByVal 解答番号 As String)

    If m_正解番号 = 解答番号 Then
        MsgBox "正解"
        '正解数を1上げる
        m_正解数 = m_正解数 + 1
        
        '次の問題へ行く処理を呼ぶ
        Call 次の問題
    Else
        MsgBox "不正解"
        
        '次の問題へ行く処理を呼ぶ
        Call 次の問題
    End If
    
End Sub

'次の問題へ行く処理をする
Private Sub 次の問題()

    '総問題数に達したら結果を出力
    If m_何問目 = m_総問題数 Then
        Me.正解数出力 = m_正解数 & "問"
        MsgBox m_総問題数 - 3 & "問中" & m_正解数 & "問正解です!"
        
        '問題選択画面に戻る
        Unload 解答画面
    End If
    
    '次の問題を表示するための処理
    m_何問目 = m_何問目 + 1
    Call 画面表示(m_問題タイトル)
    
End Sub

'問題選択画面に戻る処理
Private Sub 問題選択画面に戻る_Click()
    
    Unload 解答画面

End Sub

ダウンロードはここから

音楽問題と算数問題は問題と解答をいくつか入れてあります。他の問題は「-」で入れてあります。シートの項目をいじればオリジナルのクイズ問題を出題するゲームとして使えるのでもしよろしければ遊んでみてください。

quiz_game

コメント

タイトルとURLをコピーしました