ExcelマクロVBAサンプル集 | オセロを作りながらマクロVBAを学ぼう16 | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2017-12-06

オセロを作りながらマクロVBAを学ぼう16


ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第16回です。

15回に渡って、オセロ作成をしてきました、
マクロVBAコードはかなりの量になっています。

今回は最終回として、これまでを振り返ってみます。

1.シートの用意と標準モジュールの挿入
シートの用意と、標準モジュールの挿入という、
マクロをやった事のない人にもわかるレベルから始めました。

2.ブックを開いたときの処理と初期配置
イベントプロシージャーを作りました。
こういうソフト(ゲーム)の場合には、避けて通れないのがイベントになります。
イベントを完全に理解するのは、少々大変かもれませんが、
記事では、操作中心に記載しました。

3.自分の石を置ける場所の判定の整理
自分の石を置ける場所の判定
これをじっくり解説しました。
本シリーズで最も伝えたい部分になります。
やりたいことを整理して、簡潔にまとめる
これこそが、マクロVBA上達に一番大切な事です。

4.自分の石を置ける場所の判定の実装
文章で書いたものを、マクロVBAで記述する。
まさに、一番苦労する部分でもあります。
ここを乗り切るのは大変です。
その為にも、先にしっかりと文章化しておくことが重要だという事です。

5.シート機能を拡張して今後の準備
名前定義をしました。
VBAで、セル番地を直接書くと、分かりずらい事とセル位置の変更が大変です。
名前定義をすることで、VBAを読みやすく、そして、シートの変更に柔軟に対応できるようにしています。

6.黒石白石を交互に打って相手の石をひっくり返す
追加した機能は、
・ダブルクリックされた位置に手番の石を置く。
・相手の石を挟んでいたら、その相手の石を手番の石に取り替える。
・手番を交代します。
機能は難しそうですが、VBAコードの追加は割と少なくて済みました。
それまでに作成したプロシージャーがしっかりしていたという事です。

7.パス確認、終局確認、石数取得
パスとは
終局とは
これらの定義をしてから、マクロVBAコードを作成しています。
定義をしっかりしないと、このような処理はVBAコードを書くことが出来ません。

8.石を置ける場所の表示とアニメーション
ゲームとしての雰囲気も大事なので、
オセロに限らず、ゲームは楽しさが必要だと思います。

9.PC対戦の実装
まずは、置ける場所からランダムに石を置くという機能で実装しました。
いきなり完成形を作ろうとせず、最低限の機能を実装して、動作確認しています。
これは、ゲームに限らず、ソフト作成時には常に意識すべき手順になります。

10.置く場所に重みを付けて少しだけ強く
オセロとして、少しはまともなゲームが出来るようにしました。
オセロ初心者は、この置く場所の重みを少し意識するだけである程度強くなれます。
ソフトとしても、間違いなく強くなッたはずです。

11.相手の応手を評価してさらに強く
テーブルゲームに勝つための最大の要素は、
相手の手を考えることです。
相手に良い手を打たせない、そのように自分が打つことが勝利への近道です。
悪手とは、相手に対応する良い手があるという事なのです。
相手の可能な応手を数値化して判定するようにしました。
これで、かなり強くなったはずです。

12.PC対PCの対戦で強さを確認
ソフトの強さを判定するには、実際に戦わせてみるのが一番です。
というか、ゲームなので、実際に戦ってみないと強さは分からないです。
何十戦、何百戦と、PC同士で戦わせた結果をみられるようにしました。

13.パラメーターと重みを調整してさらに強く
自分の打つ手、相手の応手、
これを数値化する部分の調整と、
新たに、評価項目を追加して、より強くしました。
強くなったかは、実際にPC同士で戦わせて確認します。
確実に強くなったことが確認出来ました。

14.やはり「待った」が欲しい
あくまで個人で楽しむソフトなので、楽しめるような機能を追加しました。
「待った」が楽しいかどうかは疑問もありますが・・・
「待った」の実装の為には、棋譜も必要なので保存できるようにしました。

15.棋譜で対局を再現
棋譜があつかえるようになったので、
せっかくなので棋譜とおりに対局を再現できるようにしました。
1手ずつ見ていくことで、敗因・勝因もわかるようになる・・・かも
これにより、他で作成された棋譜(があれば)も再現できるはずです。


最後の機能追加
シートの見出しが邪魔な感じがします。



オセロの座標と、エクセルの行列見出しがあり、
ちょっと勘違いしやすくなってしまっています。
この見出しを消すには、



表示→見出し
このチェックを外します。
そこで、ブックを開いたら、マクロでそれをやってしまいましょう。

ActiveWindow.DisplayHeadings = False

この一文を、
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で書くととどうなるか
今回の記事は、ここに注力して書いてみました。


全体の目次


ここまでのサンプルファイルのダウンロード




同じテーマ「ExcelマクロVBAサンプル集」の記事

アメブロの記事本文をVBAでバックアップする1
数独(ナンプレ)を解くVBAに挑戦1
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証1
ナンバーリンク(パズル)を解くVBAに挑戦1
ナンバーリンクを解くVBAのパフォーマンス改善1

新着記事 ・・・新着記事一覧を見る

大量VlookupをVBAで高速に処理する方法について|ExcelマクロVBA技術解説(12月12日)
オセロを作りながらマクロVBAを学ぼう|ExcelマクロVBAサンプル集(11月26日)
ScreenUpdating=False時にエラー停止後にシートが固まったら|ExcelマクロVBA技術解説(11月21日)
データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い分け方|ExcelマクロVBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • オセロを作りながらマクロVBAを学ぼう16

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP