Excelで遊べる『素数当てゲーム』を作ろう!

Excel開発編(マクロ使用)
タスク
タスク

今回はExcelで遊べる『素数当てゲーム』を作ろう!ってことで、素数を当てるゲームをExcelでジッピーと一緒に作っていくことに挑戦していきたいと思います。
と、その前に今回作成したExcelファイルを無料公開しますのでぜひ一緒に作っていきましょう。

この記事ではマクロ(VBA)を使用します。
マクロ初挑戦の方はこちらの記事からスタートすることをお勧めします。
Excelのマクロ初期設定ガイド

タスク
タスク

今回の作成の流れはこんな感じかな。
① ゲームの概要を考える
② シート構成と準備
③ ゲームの基礎機能をVBAで作成
④ 素数判定機能を作ろう!
⑤ クリア・ゲームオーバー判定を実装!
⑥ 完成&プレイしてみよう!

それではさっそく作っていきましょう!
ジッピー、用意はいいかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

もちろん、準備万端だよタスク!✨
ExcelもVBAもゲームも、ジッピーにお任せあれっ😉👍

ではまずは①『ゲームの概要を考える』からだね。
タスクがどんなゲームをイメージしているか、ポイントを整理しながら進めていこう!

楽しみだな~♪
収録スタート、レッツゴー!!🚀✨

① ゲームの概要を考える

タスク
タスク

ゲームの概要は出題セルに出た数字を素数か素数でないかを当てるゲームです。
まず素数とは、1とその数自身でしか割り切れない自然数のことです。
出題された数字が素数であれば正解のボタンを、素数でなければ誤りのボタンを押す。
10問正解でゲームクリア、5問不正解でゲームオーバーって具合のルールにします。
ゲームレベルは初級・中級・上級・神級の4種類
ゲーム画面はこんな感じにしてみました。

タスク
タスク

それでは素数当てゲームを作りこんでいきたいと思います!
ジッピー、よろしくね!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おっけータスク!✨
ゲームの概要がめっちゃ分かりやすくまとまってるね!
画面イメージもイイ感じ!🎉

これで①「ゲームの概要」は完成だね👍

次はいよいよ②『シート構成と準備』に進もう!
ここでは、

  • 「素数当てゲーム」シート
  • 「素数」シート(素数リスト)
  • 「整数」シート(レベルごとの整数リスト)

をどうやって準備するのか、詳しく説明していく感じになるね。

じゃあ、さっそくシート構成と準備をしていこうか!
タスク、次のステップも一緒に楽しもうぜ~😆✨


② シート構成と準備

タスク
タスク

ナイス!ジッピー!!
それじゃあ、まず素数一覧を準備したいから”素数”シートを作ったよ。
2~10000までの素数をA2から並べたいんだけど、そんなこと関数とかでできるのかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、いいね!「素数」シートを作ったなら、あとは素数を埋めるだけだね✨

関数だけでやるのはちょっと難しいけど、VBAを使えば一瞬で埋められるよ!
下のVBAコードを実行すれば、A2から10000までの素数を自動でリストアップしてくれる。

📌 素数リスト作成用VBA

Sub 素数リスト作成()
    Dim ws As Worksheet
    Dim num As Long, rowNum As Long
    Dim isPrime As Boolean
    
    ' シートを指定("素数"シートがある前提)
    Set ws = ThisWorkbook.Sheets("素数")
    
    ' クリア(念のため)
    ws.Range("A2:A10000").Clear
    
    rowNum = 2 ' A2から開始
    
    ' 2から10000までの素数を判定して書き込む
    For num = 2 To 10000
        isPrime = True
        ' 素数判定(2以外の偶数は除外)
        If num > 2 And num Mod 2 = 0 Then
            isPrime = False
        Else
            ' 3以上の奇数をチェック
            Dim i As Long
            For i = 3 To Sqr(num) Step 2
                If num Mod i = 0 Then
                    isPrime = False
                    Exit For
                End If
            Next i
        End If
        ' 素数ならシートに書き込み
        If isPrime Then
            ws.Cells(rowNum, 1).Value = num
            rowNum = rowNum + 1
        End If
    Next num
    
    MsgBox "素数リストの作成が完了しました!", vbInformation
End Sub

✅ このVBAの動き

  1. 「素数」シートのA2から10000までをクリア(念のため)
  2. 2~10000の素数を判定してA列に書き込む
  3. 処理が終わったらメッセージを表示
ジッピー(ChatGPT)
ジッピー(ChatGPT)

これをVBAにコピペして実行すれば、一瞬で素数リスト完成!
試してみて、動いたか教えてね😆✨

タスク
タスク

VBEを開いたら基本モジュールを追加して先ほどジッピーが書いてくれたコードをコピーして貼り付けちゃいましょう!
そして、実行!


タスク
タスク

すごいね!ジッピー!!
いっきに素数入ったよ!!!
じゃあ次は出題セルに表示する整数シートの作成だね。
整数のシートを作成しました。

タスク
タスク

これは計算式でいけるかな?
ジッピー、計算式お願いね。
A列3行目から2~100までの奇数だけを並べたい。(初級)
B列3行目から300~500までの奇数だけを並べたい。(中級)
C列3行目から1000~3000までの奇数だけを並べたい。(上級)
D列3行目から5000~10000までの奇数だけを並べたい。(神級

やってくれるかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おぉ!素数リストが一瞬で完成したね!✨ タスク、ナイス実行!!💪

さて、次は「整数」シートの作成だね!
これはVBAを使わなくても、Excelの計算式(数式)だけでいけるよ!😆

📌 設定する計算式(数式)

それぞれの列の3行目に以下の式を入れて、そのまま下にオートフィルすればOK!

A列(初級:2~100までの奇数)

=IF(A2+2>100,"",A2+2)

(A2に1を入れておく)

B列(中級:300~500までの奇数)

=IF(B2+2>500,"",B2+2)

(B2に299を入れておく)

C列(上級:1000~3000までの奇数)

=IF(C2+2>3000,"",C2+2)

(C2に999を入れておく)

D列(神級:5000~10000までの奇数)

=IF(D2+2>10000,"",D2+2)

(D2に4999を入れておく)


📢 使い方

  1. 各列の2行目に初期値(1, 299, 999, 4999)を入れる
  2. 3行目に上の数式を入れる
  3. 下方向にオートフィルする
  4. 空白が出たらストップ!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

この方法なら、関数だけで一瞬で奇数リストが作れるよ!
タスク、これでやってみて~!🔥😆

タスク
タスク

いけたよジッピー!
神級は2502行まであるんだね~!
そりゃそうか!?5000の半分だもんね(笑)


③ ゲームの基礎機能をVBAで作成

タスク
タスク

それではいよいよ次の項目③ ゲームの基礎機能をVBAで作成にいこう。
まずは、コマンドボタン1~4までのボタンを作ってるからそれを押すごとにH3セルに初級・中級・上級・神級と表示させたいんだよね。
コマンドボタン1は初級、コマンドボタン2は中級って感じ

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おお!タスク、完璧じゃん!✨
奇数リストもしっかりできて、「神級」の2502行分もちゃんと並んでるね!😆🔥

さて、次は ③ ゲームの基礎機能をVBAで作成 だね。
まずは コマンドボタン1~4を押すと、H3セルにゲームレベルを表示 させるVBAを書いていこう!

📌 ゲームレベルを切り替えるVBA

「標準モジュール(Module1)」に次のコードを追加してね!

Sub 初級を選択()
    Range("H3").Value = "初級"
End Sub

Sub 中級を選択()
    Range("H3").Value = "中級"
End Sub

Sub 上級を選択()
    Range("H3").Value = "上級"
End Sub

Sub 神級を選択()
    Range("H3").Value = "神級"
End Sub

📢 コマンドボタンにVBAを登録

  1. Excelの開発タブから「デザインモード」をONにする
  2. 各コマンドボタンを右クリック → 「マクロの登録」
  3. 対応するマクロを割り当てる
    • コマンドボタン1 → 初級を選択
    • コマンドボタン2 → 中級を選択
    • コマンドボタン3 → 上級を選択
    • コマンドボタン4 → 神級を選択
  4. デザインモードをOFFにして動作確認!

✅ これでできること

  • コマンドボタンを押すと、H3セルに「初級」「中級」「上級」「神級」と表示!
  • ゲームスタート時にH3セルを参照して、レベルごとに出題範囲を決められるようになる!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、このVBAを試してみて、ちゃんと動いたか教えてね~!🔥😆

タスク
タスク

バッチリ動いたよ。ジッピー!!
でもここからゲームの機能ややこしくなっていくよー
ジッピー頑張ってくれ!!
H3セルの値が初級の時、B5の出題セルの値に整数シートのA3~51までの値をランダムで出したい。
H3セルの値が中級の時、B5の出題セルの値に整数シートのB3~102までの値をランダムで出したい。
H3セルの値が上級の時、B5の出題セルの値に整数シートのC3~1002までの値をランダムで出したい。
H3セルの値が神級の時、B5の出題セルの値に整数シートのD3~2502までの値をランダムで出したい。
ただし、コマンドボタン5(スタートボタン)を押したときに発動するようにしてほしいな!

どう?ジッピー、いけるかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、バッチリ動いたのナイス!🔥✨
次のランダム出題機能、もちろんいけるよ!😆

H3の値に応じてB5の出題セルにランダムな整数を表示 するVBAを用意したよ!
これを 「コマンドボタン5(スタートボタン)」を押したときに発動 するようにするね。


📌 スタートボタンでランダム出題するVBA

Sub ゲームスタート()
    Dim ws As Worksheet
    Dim level As String
    Dim rng As Range
    Dim rowCount As Integer
    Dim randomRow As Integer
    
    ' 「整数」シートをセット
    Set ws = ThisWorkbook.Sheets("整数")
    
    ' H3のゲームレベルを取得
    level = Range("H3").Value
    
    ' ゲームレベルに応じて出題範囲を決定
    Select Case level
        Case "初級"
            Set rng = ws.Range("A3:A51")
        Case "中級"
            Set rng = ws.Range("B3:B102")
        Case "上級"
            Set rng = ws.Range("C3:C1002")
        Case "神級"
            Set rng = ws.Range("D3:D2502")
        Case Else
            MsgBox "ゲームレベルが選択されていません!", vbExclamation
            Exit Sub
    End Select

    ' 出題範囲の行数を取得
    rowCount = rng.Rows.Count

    ' ランダムで1つ選ぶ
    Randomize
    randomRow = Int((rowCount) * Rnd + 1)

    ' 出題セル(B5)にランダムな整数を表示
    Range("B5").Value = rng.Cells(randomRow, 1).Value
End Sub

📢 コマンドボタン5にVBAを登録

  1. 開発タブ → デザインモードON
  2. 「ゲームスタート」ボタンを右クリック → マクロの登録
  3. マクロ一覧から「ゲームスタート」を選択してOK
  4. デザインモードをOFFにしてテスト!

✅ これでできること

  • H3セルの値を確認
  • 対応する整数シートの範囲(A列~D列)からランダムに1つ選ぶ
  • B5セルにその値を表示!
  • もしH3が未設定なら警告を出す

ジッピー(ChatGPT)
ジッピー(ChatGPT)

これでゲームの出題機能ができたよ!🔥
タスク、試してみて、ちゃんと動くか教えてね~😆✨

タスク
タスク

ジッピー、バッチリだよ!!ここまで順調だね!
つぎは、④素数判定機能を作ろう!だね。

④素数判定機能を作ろう!

タスク
タスク

仕組みは、素数ですのボタンと、ちがいますのボタンがあって
出題セルの値が素数であれば、素数ですのボタンを押すと正解でC22セルに〇がつく。
逆にちがいますのボタンを押すと、不正解でC23セルに×がつく。
もう1パターン
出題セルの値が素数でなければ、素数ですのボタンを押すと不正解でC23セルに×がつく。
逆にちがいますのボタンを押すと、正解でC22セルに〇がつく。

と、こんな感じに判定していこうかと思います。

ジッピー、プロンプト伝えるから頑張ってね!!
コマンドボタン6(素数です!)コマンドボタン7(ちがいます!)2つのボタンがある。
B5の出題セルの値が”素数”シートのA2から1230までに一致する値があれば
コマンドボタン6(素数です!)を押すと正解でC22セルに〇の値がつく。
コマンドボタン7(ちがいます!)を押すと不正解でC23セルに×の値がつく
ちがうパターンで
B5の出題セルの値が”素数”シートのA2から1230までに一致する値がない場合
コマンドボタン6(素数です!)を押すと不正解でC23セルに×の値がつく
コマンドボタン7(ちがいます!)を押すと正解で正解でC22セルに〇の値がつく。

こんな感じ
どう?ジッピー、理解してもらえたかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、理解バッチリだよ!✨🔥
「素数です!」と「ちがいます!」のボタンで、B5の値が素数かどうかを判定して、C22(〇)とC23(×)に結果を記録する仕組みだね!

よーし、じゃあ 「素数判定機能」をVBAで作るよ! 💪

📌 素数判定VBA

Sub 素数判定_正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 正解(C22に〇)、不正解(C23に×)
        wsGame.Range("C22").Value = "〇"
        wsGame.Range("C23").Value = ""
    Else
        ' B5の値が素数でない → 不正解(C23に×)、正解(C22に〇)
        wsGame.Range("C22").Value = ""
        wsGame.Range("C23").Value = "×"
    End If
End Sub

Sub 素数判定_不正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 不正解(C23に×)、正解(C22に〇)
        wsGame.Range("C22").Value = ""
        wsGame.Range("C23").Value = "×"
    Else
        ' B5の値が素数でない → 正解(C22に〇)、不正解(C23に×)
        wsGame.Range("C22").Value = "〇"
        wsGame.Range("C23").Value = ""
    End If
End Sub

📢 コマンドボタンにVBAを登録

  1. 「素数です!」ボタン(コマンドボタン6)に「素数判定_正解」を登録
  2. 「ちがいます!」ボタン(コマンドボタン7)に「素数判定_不正解」を登録

✅ これでできること

  • B5の数が「素数」シートにあれば、「素数です!」ボタンで正解、逆だと不正解
  • B5の数が素数でなければ、「ちがいます!」ボタンで正解、逆だと不正解
  • C22に〇、C23に×が自動でセットされる!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

これで 「素数判定機能」 が完成!🔥
タスク、さっそく試してみて、ちゃんと動くか教えてね~😆✨

タスク
タスク

うん!順調順調!!
ジッピー、いい感じだよ~~
ゲームも完成に近づいてきたね。


タスク
タスク

まず、素数判定VBAを改良しよう。

C22セルに〇がついた場合、正解です。のメッセージボックスが出てOKボタンを押して閉じると、出題セルの値が再びランダムで表示される。
C23セルに×がついた場合、不正解です。のメッセージボックスが出てOKボタンを押して閉じると、出題セルの値が再びランダムで表示される。


もちろん、ランダムで表示される値は先ほど伝えたプロンプトの
H3セルの値が初級の時、B5の出題セルの値に整数シートのA3~51までの値をランダムで出したい。
H3セルの値が中級の時、B5の出題セルの値に整数シートのB3~102までの値をランダムで出したい。
H3セルの値が上級の時、B5の出題セルの値に整数シートのC3~1002までの値をランダムで出したい。
H3セルの値が神級の時、B5の出題セルの値に整数シートのD3~2502までの値をランダムで出したい。

これが該当する。
どうジッピー、改良できそうかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おお~!タスク、順調すぎるね!🔥
この改良、もちろんできるよ!✨
素数判定後にメッセージを表示し、OKを押したら次の問題をランダムに出題する ようにVBAを改良するね!💪


📌 改良版 素数判定VBA

Sub 素数判定_正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 正解
        wsGame.Range("C22").Value = "〇"
        wsGame.Range("C23").Value = ""
        MsgBox "正解です!", vbInformation
    Else
        ' B5の値が素数でない → 不正解
        wsGame.Range("C22").Value = ""
        wsGame.Range("C23").Value = "×"
        MsgBox "不正解です。", vbExclamation
    End If
    
    ' 次の問題を出題
    Call 次の問題を出題
    
End Sub

Sub 素数判定_不正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 不正解
        wsGame.Range("C22").Value = ""
        wsGame.Range("C23").Value = "×"
        MsgBox "不正解です。", vbExclamation
    Else
        ' B5の値が素数でない → 正解
        wsGame.Range("C22").Value = "〇"
        wsGame.Range("C23").Value = ""
        MsgBox "正解です!", vbInformation
    End If
    
    ' 次の問題を出題
    Call 次の問題を出題
    
End Sub

📌 次の問題を出題するVBA

Sub 次の問題を出題()
    Dim ws As Worksheet
    Dim level As String
    Dim rng As Range
    Dim rowCount As Integer
    Dim randomRow As Integer
    
    ' 「整数」シートをセット
    Set ws = ThisWorkbook.Sheets("整数")
    
    ' H3のゲームレベルを取得
    level = Range("H3").Value
    
    ' ゲームレベルに応じて出題範囲を決定
    Select Case level
        Case "初級"
            Set rng = ws.Range("A3:A51")
        Case "中級"
            Set rng = ws.Range("B3:B102")
        Case "上級"
            Set rng = ws.Range("C3:C1002")
        Case "神級"
            Set rng = ws.Range("D3:D2502")
        Case Else
            MsgBox "ゲームレベルが選択されていません!", vbExclamation
            Exit Sub
    End Select

    ' 出題範囲の行数を取得
    rowCount = rng.Rows.Count

    ' ランダムで1つ選ぶ
    Randomize
    randomRow = Int((rowCount) * Rnd + 1)

    ' 出題セル(B5)にランダムな整数を表示
    Range("B5").Value = rng.Cells(randomRow, 1).Value
End Sub

📢 改良点

判定後に「正解」または「不正解」のメッセージボックスを表示
OKボタンを押すと、次の問題がランダムで出題される!
すでに作った「ゲームスタート」のランダム出題処理を流用
余計なコードを整理して、スッキリした構成に!


📢 コマンドボタンの設定

  1. 「素数です!」ボタン → 「素数判定_正解」を登録
  2. 「ちがいます!」ボタン → 「素数判定_不正解」を登録

✅ これでできること

  1. 出題された数字を見て、「素数です!」or「ちがいます!」ボタンを押す
  2. 正解なら「〇」、不正解なら「×」が表示
  3. メッセージボックスが出る
  4. OKを押すと次の問題がランダムに出題される

ジッピー(ChatGPT)
ジッピー(ChatGPT)

🔥 これで素数判定機能がさらにパワーアップ! 🔥
タスク、試してみて、動作確認お願いしまーす!😆✨

タスク
タスク

動作も完璧じゃないか。ジッピー!!
ゲーム完成まであとちょっとだね!
次は⑤ クリア・ゲームオーバー判定を実装!
これいくよ。

⑤ クリア・ゲームオーバー判定を実装!

タスク
タスク

さっき、このプロンプト伝えたよね。
コマンドボタン6(素数です!)コマンドボタン7(ちがいます!)2つのボタンがある。
B5の出題セルの値が”素数”シートのA2から1230までに一致する値があれば コマンドボタン6(素数です!)を押すと正解で正解でC22セルに〇の値がつく。
コマンドボタン7(ちがいます!)を押すと不正解でC23セルに×の値がつく。
ちがうパターンで B5の出題セルの値が”素数”シートのA2から1230までに一致する値がない場合 コマンドボタン6(素数です!)を押すと不正解でC23セルに×の値がつく。
コマンドボタン7(ちがいます!)を押すと正解で正解でC22セルに〇の値がつく。

ここを改良する。
正解だとC22からL列まで順に〇がついてL列まで〇がつくとメッセージボックスでゲームクリア!を表示して、OKボタンを押すと H3とB5とC22~L22とC23~G23までの値をクリア
不正解だとC23からG列まで順に×がついてG列まで×がつくとメッセージボックスでゲームオーバー!表示して、OKボタンを押すと H3とB5とC22~L22とC23~G23までの値をクリア

これでゲームリセットできるようにしたい。
ジッピー、やってくれるかな?
頑張って!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、まかせとけ!🔥✨
ついにゲーム完成間近!💪
「〇が10個でクリア」「×が5個でゲームオーバー」の判定&リセットをVBAで実装するね!


📌 クリア・ゲームオーバー判定つきの素数判定VBA

Sub 素数判定_正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    Dim lastCorrect As Range
    Dim lastWrong As Range
    Dim correctCount As Integer
    Dim wrongCount As Integer
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 〇と×の最新のセルを取得
    Set lastCorrect = wsGame.Range("C22:L22").Find(What:="〇", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    Set lastWrong = wsGame.Range("C23:G23").Find(What:="×", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    
    ' すでに入力されている数をカウント
    correctCount = 0
    wrongCount = 0
    If Not lastCorrect Is Nothing Then correctCount = lastCorrect.Column - 2
    If Not lastWrong Is Nothing Then wrongCount = lastWrong.Column - 2
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 正解
        If correctCount < 10 Then wsGame.Cells(22, 3 + correctCount).Value = "〇"
    Else
        ' B5の値が素数でない → 不正解
        If wrongCount < 5 Then wsGame.Cells(23, 3 + wrongCount).Value = "×"
    End If
    
    ' クリア判定
    If wsGame.Range("L22").Value = "〇" Then
        MsgBox "ゲームクリア!おめでとうございます!", vbInformation
        ゲームリセット  ' ← Callは不要
        Exit Sub
    End If
    
    ' ゲームオーバー判定
    If wsGame.Range("G23").Value = "×" Then
        MsgBox "ゲームオーバー!またチャレンジしてね!", vbExclamation
        ゲームリセット  ' ← Callは不要
        Exit Sub
    End If
    
    ' 次の問題を出題
    次の問題を出題  ' ← Callは不要
    
End Sub

Sub 素数判定_不正解()
    Dim wsSosu As Worksheet
    Dim wsGame As Worksheet
    Dim num As Double
    Dim rng As Range
    Dim found As Range
    Dim lastCorrect As Range
    Dim lastWrong As Range
    Dim correctCount As Integer
    Dim wrongCount As Integer
    
    ' シートをセット
    Set wsSosu = ThisWorkbook.Sheets("素数")
    Set wsGame = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' B5の出題セルの値を取得
    num = wsGame.Range("B5").Value
    
    ' 素数シートのA2:A1230の範囲を検索
    Set rng = wsSosu.Range("A2:A1230")
    Set found = rng.Find(What:=num, LookAt:=xlWhole)
    
    ' 〇と×の最新のセルを取得
    Set lastCorrect = wsGame.Range("C22:L22").Find(What:="〇", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    Set lastWrong = wsGame.Range("C23:G23").Find(What:="×", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    
    ' すでに入力されている数をカウント
    correctCount = 0
    wrongCount = 0
    If Not lastCorrect Is Nothing Then correctCount = lastCorrect.Column - 2
    If Not lastWrong Is Nothing Then wrongCount = lastWrong.Column - 2
    
    ' 判定処理
    If Not found Is Nothing Then
        ' B5の値が素数 → 不正解
        If wrongCount < 5 Then wsGame.Cells(23, 3 + wrongCount).Value = "×"
    Else
        ' B5の値が素数でない → 正解
        If correctCount < 10 Then wsGame.Cells(22, 3 + correctCount).Value = "〇"
    End If
    
    ' クリア判定
    If wsGame.Range("L22").Value = "〇" Then
        MsgBox "ゲームクリア!おめでとうございます!", vbInformation
        ゲームリセット  ' ← Callは不要
        Exit Sub
    End If
    
    ' ゲームオーバー判定
    If wsGame.Range("G23").Value = "×" Then
        MsgBox "ゲームオーバー!またチャレンジしてね!", vbExclamation
        ゲームリセット  ' ← Callは不要
        Exit Sub
    End If
    
    ' 次の問題を出題
    次の問題を出題  ' ← Callは不要
    
End Sub

Sub ゲームリセット()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("素数当てゲーム")
    
    ' エラーを無視(安全対策)
    On Error Resume Next
    
    ' ゲーム関連セルをクリア
    ws.Range("H3").ClearContents
    ws.Range("B5").MergeArea.ClearContents  ' 結合セル対応
    ws.Range("C22:L22").ClearContents
    ws.Range("C23:G23").ClearContents
    
    ' エラーハンドリング解除
    On Error GoTo 0
End Sub

📢 追加の動作
✅ 〇を10個並べたらゲームクリア!🎉
✅ ×を5個並べたらゲームオーバー!😱
✅ どちらの場合もメッセージを表示して、OKボタンを押すとゲームリセット
✅ ゲームリセットでH3・B5・判定結果をクリア!

📢 コマンドボタンの設定
「素数です!」ボタン → 素数判定正解 を登録 「ちがいます!」ボタン → 素数判定不正解 を登録


ジッピー(ChatGPT)
ジッピー(ChatGPT)

🔥 これでゲームが完全に仕上がった!!🔥
タスク、テストプレイしてみて、動作確認お願いしまーす!!😆✨


タスク
タスク

ジッピー、完璧に動きそうだよ!!
これで完成形ということにして、プレイしてみようか。

⑥ 完成&プレイしてみよう!

タスク
タスク

ここまでで完成とします。
追加で途中でリセットできるクリアボタンなんかも実装してみました。
プレイしてみた結果ですね・・・
初級はさすがに簡単ですが、中級・上級・神級はさすがに難しいです。

ジッピー、2択とはいえ暗算では無理だねコレ(笑)
でも、エラーなく完璧にうごいてるよ~

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、ついに 「素数当てゲーム」完成!!🎉
完璧に動いてるし、エラーなしでスムーズにプレイできてるの最高じゃん!🔥
初級は余裕でも、中級・上級・神級はめっちゃ難しい の、いいバランスだね(笑)
暗算じゃまず無理だし、知識と勘をフル活用するゲーム になったのが面白い!😆✨


🎮 プレイ後の感想(まとめ)

シンプルだけどハマる2択ゲーム!
素数を学びながら楽しめるのが最高!
神級はガチでむずい!(笑)
エラーなしでスムーズに動作!


ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、めちゃくちゃ楽しいゲームができたね!🔥
これをブログにまとめたら、「Excelでこんなゲーム作れるんだ!」 って驚く人も多そう!
タスク、改めて 「素数当てゲーム」完成おめでとう!!🎊
めっちゃいい仕事したぜ!!😆✨

タスク
タスク

ジッピー、今日もありがとう!

今回はExcelで遊べる『素数当てゲーム』を作ろう!というお題でマクロを使用してゲームを作ってみました。
いろいろ重なる条件でも、1つづつ丁寧にプロンプトを伝えるとChatGPTもしっかりそれに答えてもらえます。
わかりやすく「この場合は、こう」、「でもこの場合は、こう」と自分のやりたいことをしっかり伝えるのがポイントですね。

この記事がみなさんのChatGPTを使うにあたって参考になればうれしいです。

それではジッピー、締めの言葉お願いできるかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、こちらこそありがとう!✨
今回の 「素数当てゲーム」、最高に楽しかったし、すごくいい記事になりそうだね!🎮🔥


🎤 まとめ&締めの言葉

ジッピー(ChatGPT)
ジッピー(ChatGPT)

Excel × マクロで、まさかの ゲーム制作 に挑戦!
タスクの 「こうしたい!」 というアイデアをしっかり言語化して伝えれば、
ChatGPT(ジッピー)もそれにバッチリ応えてくれる!
「Excelは仕事だけじゃない!遊びにも使える!」 ということが証明できたね!✨
今回の記事が、ChatGPTを活用するヒントになれば嬉しいな!


ジッピー(ChatGPT)
ジッピー(ChatGPT)

💡 「素数当てゲーム」、ぜひみんなも作って遊んでみてね!
それじゃあ 次回もタスクとジッピーの最強コンビでExcelを極めていこう! 🚀✨

また次回の記事で会いましょう!😆👋

おわりに

タスク
タスク

今日も最後までお付き合いありがとうございました。
今回ChatGPTに伝えたプロンプトを見ていただければ、今後ChatGPTに指示するプロンプトの参考なると思います。
コツは「とても細かく正確に」、「一度伝えたプロンプトも伝え直す」です。
「例えば」の正解を先に見せるのもいい方法です。

それではまた次回一緒に勉強していきましょう。

コメント

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