オセロを作りながらマクロ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 ・・・新着記事一覧を見る
AI時代におけるRPAとVBAの位置づけ - 補完技術としての役割と未来 -|生成AI活用研究(2025-05-12)
スマートExcel|AI×Excel:AIと進化するExcelの新常識|生成AI活用研究(2025-05-11)
VBA開発の現場で生成AIはどう使う? そのメリットと潜むリスク|生成AI活用研究(2025-05-11)
CursorでVBAを直接?編集・実行できる環境構築について|生成AI活用研究(2025-05-10)
Geminiと100本ノック 17本目:重複削除(ユニーク化)|生成AI活用研究(5月10日)
Geminiと100本ノック 16本目:無駄な改行を削除|生成AI活用研究(5月6日)
AIがあればVBAはできる:セルに絵文字を入れる|生成AI活用研究(2025-05-07)
Geminiと100本ノック 15本目:シートの並べ替え|生成AI活用研究(5月6日)
Geminiと100本ノック 14本目:社外秘シート削除|生成AI活用研究(5月4日)
Geminiと100本ノック 13本目:文字列の部分フォント|生成AI活用研究(5月4日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- オセロを作りながらマクロVBAを学ぼう№16
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。