オセロを作りながらマクロVBAを学ぼう№16
ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第16回です。
マクロVBAコードはかなりの量になっています。
今回は最終回として、これまでを振り返ってみます。
マクロをやった事のない人にもわかるレベルから始めました。
こういうソフト(ゲーム)の場合には、避けて通れないのがイベントになります。
イベントを完全に理解するのは、少々大変かもれませんが、
記事では、操作中心に記載しました。
これをじっくり解説しました。
本シリーズで最も伝えたい部分になります。
やりたいことを整理して、簡潔にまとめる
これこそが、マクロVBA上達に一番大切な事です。
まさに、一番苦労する部分でもあります。
ここを乗り切るのは大変です。
その為にも、先にしっかりと文章化しておくことが重要だという事です。
VBAで、セル番地を直接書くと、分かりずらい事とセル位置の変更が大変です。
名前定義をすることで、VBAを読みやすく、そして、シートの変更に柔軟に対応できるようにしています。
・ダブルクリックされた位置に手番の石を置く。
・相手の石を挟んでいたら、その相手の石を手番の石に取り替える。
・手番を交代します。
機能は難しそうですが、VBAコードの追加は割と少なくて済みました。
それまでに作成したプロシージャーがしっかりしていたという事です。
終局とは
これらの定義をしてから、マクロVBAコードを作成しています。
定義をしっかりしないと、このような処理はVBAコードを書くことが出来ません。
オセロに限らず、ゲームは楽しさが必要だと思います。
いきなり完成形を作ろうとせず、最低限の機能を実装して、動作確認しています。
これは、ゲームに限らず、ソフト作成時には常に意識すべき手順になります。
オセロ初心者は、この置く場所の重みを少し意識するだけである程度強くなれます。
ソフトとしても、間違いなく強くなッたはずです。
相手の手を考えることです。
相手に良い手を打たせない、そのように自分が打つことが勝利への近道です。
悪手とは、相手に対応する良い手があるという事なのです。
相手の可能な応手を数値化して判定するようにしました。
これで、かなり強くなったはずです。
というか、ゲームなので、実際に戦ってみないと強さは分からないです。
何十戦、何百戦と、PC同士で戦わせた結果をみられるようにしました。
これを数値化する部分の調整と、
新たに、評価項目を追加して、より強くしました。
強くなったかは、実際にPC同士で戦わせて確認します。
確実に強くなったことが確認出来ました。
「待った」が楽しいかどうかは疑問もありますが・・・
「待った」の実装の為には、棋譜も必要なので保存できるようにしました。
せっかくなので棋譜とおりに対局を再現できるようにしました。
1手ずつ見ていくことで、敗因・勝因もわかるようになる・・・かも
これにより、他で作成された棋譜(があれば)も再現できるはずです。

ちょっと勘違いしやすくなってしまっています。
この見出しを消すには、

このチェックを外します。
そこで、ブックを開いたら、マクロでそれをやってしまいましょう。
ThisWorkbook内のWorkbook_Openイベントに追記します。
追記する場所は、どこでも良いのですが、
.AddItem "PC5"
.AddItem "PC6"
End With
ActiveWindow.DisplayHeadings = False
.Protect
End With
End Sub
シート保護する直前に入れました。
今回のソフトは、
自分が打つ→相手が打つ
ここまでしか判断していません。
中盤までは、場所の重みと相手の手までを考えれば、とりあえずは十分ですが、
終盤近くになると、もう少し先を考えないと勝てなくなります。
私ですと、
自分が打つ→相手が打つ→自分が打つ
終盤では、最低でもここまでは考えます。
従って、私に勝つには、最低でももう1手先まで評価する必要があります。
しかし、
置ける場所が8箇所だとしたら、
3手先は、
8×8×8=512
この中から最善手を選ぶことになりますので、かなり高度な判定が必要になります。
プログラミングテクニックも高度なものが必要となってきます。
プログラミングテクニックはともかく、
オセロとしての、効率的な最善手の判定方法は調べなければ私にはわかりません。
私自身、それほどオセロが強いわけではありません。
今回作成したソフトのロジックは、私がオセロを打つときに考えていることをVBAコードにしただけであり、
しかも、先読みも2手先までとなっているので、そんなに強くなるはずがありません。
今後時間が取れて、良い案が出たら続きを作成するかもしれませんが、多分ないと思います。
思考を論理的に整理し、それをプログラミング言語に表す
オセロを打つとは、どういう事か
オセロで勝つためには、どのように打てば良いか
これらを、自分で考えて、それをマクロVBAで書くととどうなるか
今回の記事は、ここに注力して書いてみました。
ここまでのサンプルファイルのダウンロード
新着記事NEW ・・・新着記事一覧を見る
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)
ListBox・ComboBoxをマウスホイール対応させる|ユーザーフォーム入門(2026-08-09)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- オセロを作りながらマクロVBAを学ぼう№16
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.
