[初回公開] 2025年05月27日
「Excelって表計算ソフトでしょ?ゲームなんて作れるの?」と思っていませんか?実は、Excelには「マクロ(VBA)」という強力な機能があり、工夫次第でちょっとしたゲームも作れてしまいます。本記事では、定番のパズルゲーム「マインスイーパ」をExcelのマクロ機能を使って作る手順を、初心者にもわかりやすく解説します。エクセル操作とプログラミングの両方を楽しみたい方は、ぜひ最後までご覧ください!

このページの目次
1.Excel でゲームは作れるのか?
Excel は通常、表計算やデータ分析に使われるツールですが、マクロ(VBA)を活用すれば、ボタンや条件分岐などの要素を組み合わせて、簡単なゲームを作成することが可能です。この記事では、Excel でマインスイーパを作るコードも触れていきます。

2.マインスイーパとは
マインスイーパは、地雷を避けながらマスを開けていく有名なロジックパズルゲームです。マインスイーパの基本ルールやゲームの進め方は次の通りです。
これにより、これから作成する Excel 版のマインスイーパが、どのような仕組みを再現するのかがイメージしやすくなります。
- マス目のある真っ白なフィールドが表示される
- マス目をクリックすると数字か爆弾が表示される
- 爆弾を表示させてしまうとゲームオーバー
- 数字が表示されたらセーフ
- 数字はそのマスの周辺(8マス)に爆弾が何個あるか示している
- 爆弾以外の全てのマス目を開くとゲームクリア
3.Excel のマクロでゲーム「マインスイーパ」を作成する方法
この章では、Excel 上でマインスイーパを再現するための具体的な作業手順を解説します。
表の準備からコードの記述、マクロの実行方法まで、順を追って進めていくため、VBA 初心者でも取り組みやすくなっています。
3-1.10 x 10 のマスを用意する
最初のステップは、Excel のシートに10列×10行のマス目を用意することです。
このマス目がマインスイーパの盤面になります。セルの幅や高さを調整することで、後の作業がスムーズになります。
3-2.1マスを正方形にする
Excel のセルは初期状態では長方形のため、1つ1つのマスを正方形に近づけることで、見た目もゲームらしく整えます。
行の幅はそのままに、列の幅を 3 にするとよいです。

3-3.VBA を開いて「標準モジュール」にコードを書く
いよいよ VBA(Visual Basic for Applications)の登場です。
Alt + F11 キーで VBE を開き、「標準モジュール」に基本的なゲーム処理のコードを記述していきます。
地雷の配置やセルの動作を管理するためのロジックが含まれます。

VBA を開いて Microsoft Excel Objects で右クリックして「挿入→標準モジュール」でコードを入力するウィンドウが表示されるので下記を記入します。
' 10x10 マスを利用する
' A から J 列の幅は 3 にする
Public bombBoard(1 To 10, 1 To 10) As Boolean ' Bがあるかどうかを管理する配列
Public revealedBoard(1 To 10, 1 To 10) As Boolean ' セルが開放されたかどうかを管理する配列
Public bombs As Integer ' Bの数
Public gameActive As Boolean ' 進行状態を管理するフラグ
Sub Mine()
Dim i As Integer, j As Integer
bombs = 10 ' Bの数
gameActive = True
' 盤面の初期化
For i = 1 To 10
For j = 1 To 10
bombBoard(i, j) = False ' Bなし
revealedBoard(i, j) = False ' セルは未開放
Cells(i, j).ClearContents
Cells(i, j).Interior.ColorIndex = 2 ' セルの色を白に戻す
Next j
Next i
' Bの配置
Randomize
For i = 1 To bombs
Dim row As Integer, col As Integer
row = Int((10 * Rnd) + 1)
col = Int((10 * Rnd) + 1)
' すでにBがある場合は再試行
If bombBoard(row, col) = False Then
bombBoard(row, col) = True ' B配置
Else
i = i - 1 ' 再試行
End If
Next i
End Sub
3-4.「Sheet1(Sheet1)」にコードを書く
シート自体にもイベントハンドラなどのコードを書き加える必要があります。
ここでは、ユーザーがセルをクリックしたときの処理や、表示の制御を行うためのコードを記述します。
VBA の「Sheet1(Sheet1)」をダブルクリックして下記を追記します。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Integer, c As Integer
Dim bombCount As Integer
Dim rowOffset As Integer, colOffset As Integer
Dim totalRevealed As Integer
Dim totalCells As Integer
' A1:J10の範囲が選択された場合に処理
If Not Intersect(Target, Range("A1:J10")) Is Nothing Then
r = Target.row
c = Target.Column
' セルがすでに開放されている場合は何もしない
If revealedBoard(r, c) = True Then Exit Sub
' セルが爆弾の場合
If bombBoard(r, c) = True Then
' 爆弾セルを薄いグレーに設定
Target.Interior.Color = RGB(200, 200, 200) ' 爆弾セルを薄いグレーに
Target.Value = "B" ' Bを表示
Target.HorizontalAlignment = xlCenter ' Bを中央寄せ
Target.VerticalAlignment = xlCenter ' Bを中央寄せ
' 隠れている全ての爆弾を表示
For r = 1 To 10
For c = 1 To 10
If bombBoard(r, c) = True And revealedBoard(r, c) = False Then
Cells(r, c).Interior.Color = RGB(200, 200, 200) ' 爆弾セルを薄いグレーに
Cells(r, c).Value = "B" ' Bを表示
Cells(r, c).HorizontalAlignment = xlCenter ' Bを中央寄せ
Cells(r, c).VerticalAlignment = xlCenter ' Bを中央寄せ
End If
Next c
Next r
' ゲーム終了メッセージ
MsgBox "終了" ' 終了
gameActive = False ' ゲームを終了
Else
' セルを白に戻す
Target.Interior.Color = RGB(255, 255, 255)
' 周囲の爆弾の数をカウント
bombCount = 0
For rowOffset = -1 To 1
For colOffset = -1 To 1
' 範囲外のセルを除外
If r + rowOffset >= 1 And r + rowOffset <= 10 And c + colOffset >= 1 And c + colOffset <= 10 Then
' 周囲に爆弾があればカウント
If bombBoard(r + rowOffset, c + colOffset) = True Then
bombCount = bombCount + 1
End If
End If
Next colOffset
Next rowOffset
' 周囲の爆弾数をクリックしたセルに表示
If bombCount > 0 Then
Target.Value = bombCount
Else
' 周囲に爆弾がなければ0を表示
Target.Value = 0
End If
' セルの数値を中央に配置
Target.HorizontalAlignment = xlCenter
Target.VerticalAlignment = xlCenter
revealedBoard(r, c) = True ' セルを開放
End If
End If
' ゲームが進行中かつすべての爆弾でないセルが開放された場合
If gameActive Then
totalRevealed = 0
totalCells = 0
' 全セルを確認し、開放されたセルの数を数える
For r = 1 To 10
For c = 1 To 10
If revealedBoard(r, c) = True Then
totalRevealed = totalRevealed + 1
End If
totalCells = totalCells + 1
Next c
Next r
' もしすべての爆弾でないセルが開放されたら
If totalRevealed = totalCells - bombs Then
' 全ての爆弾を表示
For r = 1 To 10
For c = 1 To 10
If bombBoard(r, c) = True Then
Cells(r, c).Value = "B" ' 爆弾セルにBを表示
Cells(r, c).Interior.Color = RGB(200, 200, 200) ' 爆弾セルを薄いグレーに
Cells(r, c).HorizontalAlignment = xlCenter ' Bを中央寄せ
Cells(r, c).VerticalAlignment = xlCenter ' Bを中央寄せ
End If
Next c
Next r
' 完了のメッセージ
MsgBox "完了!すべての爆弾以外のセルを開放しました!"
End If
End If
End Sub
3-5.マクロを実行する
すべての準備が整ったら、最後にマクロを実行して、実際にゲームとして動作させます。
マクロを開くと下図のように実行できるマクロの一覧が表示されるのでボタン「実行」をクリックします。

爆弾のあるマス目を避けながらクリックしていき、全てのマス目を開くとゲームクリアです。

4.まとめ
Excel のマクロ機能を使えば、表計算以外にもこのような遊び心あふれる使い方が可能です。
本記事を通じて、マクロの基本や VBA の面白さを感じていただけたのではないでしょうか?
ぜひ自分なりの改良を加えて、オリジナルのマインスイーパを完成させてみてください。










ぼくは、とても初心者だったけど、とてもやりやすかったです。けど今作っているけど、少しミスっていて、名前がないとか言われています。
「名前がない」ですか・・・。
デバッグで黄色の背景色になっている行のプログラムを教えてもらえると何かお伝えできるかもしれません