Excel将棋:棋譜選択でその時点の盤面に戻す(№13)

Excelで将棋を作ってみましょう。
人vs人で動かしてゲームとして成立するところまでが当面の目標です。
さらに、その時点から指し継ぐこともできるようにします。
VBAの変更は、この点を中心に行いました。
盤面としては、将棋盤と駒台の状態を手数ごとに保存しておきます。
この盤面の履歴と、棋譜の履歴を一致するように作成しています。
・全体構成図
・全プロシージャー・プロパティの一覧
・クリックした時の主なプロシージャーの流れ
Excel将棋の動作

全体構成図

全プロシージャー・プロパティの一覧
| モジュール | プロシージャー | スコープ | 種別 | 行位置 | ソース | コメント |
| modゲーム開始 | ゲーム開始 | Public | Sub Function | 5 | Sub ゲーム開始() | |
| cls駒 | Class_Initialize | Private | Sub Function | 74 | Private Sub Class_Initialize() | |
| cls駒 | 正式名称 | Public | Property Let | 84 | Public Property Let 正式名称(ByVal Value As String) | |
| cls駒 | 表示名称 | Public | Property Let | 91 | Public Property Let 表示名称(ByVal Value As String) | |
| cls駒 | 通常名称 | Public | Property Get | 97 | Public Property Get 通常名称() As String | |
| cls駒 | 成駒名称 | Public | Property Let | 101 | Public Property Let 成駒名称(ByVal Value As String) | |
| cls駒 | 表示順 | Public | Property Let | 108 | Public Property Let 表示順(ByVal Value As String) | |
| cls駒 | 駒移動 | Public | Property Let | 115 | Public Property Let 駒移動(ByRef arg移動() As cls移動) | |
| cls駒 | 成駒移動 | Public | Property Let | 122 | Public Property Let 成駒移動(ByRef arg移動() As cls移動) | |
| cls駒 | 先手 | Public | Property Let | 129 | Public Property Let 先手(ByVal Value As Boolean) | |
| cls駒 | 成り | Public | Property Let | 136 | Public Property Let 成り(ByVal Value As Boolean) | |
| cls駒 | 駒位置 | Public | Property Set | 143 | Public Property Set 駒位置(ByVal arg駒位置 As g位置) | |
| cls駒 | Clone | Public | Sub Function | 155 | Public Function Clone() As cls駒 | '自身を複製する |
| cls駒 | 駒作成 | Public | Sub Function | 171 | Public Function 駒作成(ByVal arg名称 As String, ByVal arg先手 As Boolean, Optional ByVal arg位置 As g位置 = Nothing ) As cls駒 | '駒の正式名称を受け取って、その駒特有の情報を設定する |
| cls駒 | 駒移動可能位置 | Public | Sub Function | 229 | Public Function 駒移動可能位置(ByRef ary盤面() As cls駒) As Collection | '駒が移動できる位置をg位置(行、列)のCollectionで返す |
| cls駒 | 駒移動設定 | Private | Sub Function | 268 | Private Function 駒移動設定(ByVal arg動き As String) As cls移動() | '駒の動きを定義したConstより配列を作成する |
| cls駒台 | 手数 | Public | Property Let | 13 | Public Property Let 手数(ByVal Value As Long) | |
| cls駒台 | Class_Initialize | Private | Sub Function | 20 | Private Sub Class_Initialize() | |
| cls駒台 | 駒追加 | Public | Sub Function | 24 | Public Sub 駒追加(ByVal arg駒 As cls駒) | |
| cls駒台 | 駒削除 | Public | Sub Function | 38 | Public Sub 駒削除(ByVal arg駒 As Variant) | |
| cls駒台 | 履歴追加 | Public | Sub Function | 59 | Public Sub 履歴追加() | |
| cls駒台 | 駒台一覧 | Public | Sub Function | 64 | Public Function 駒台一覧(Optional ByVal arg手数 As Long = 0) As Variant() | |
| cls駒台 | ArrayCompress | Private | Sub Function | 77 | Private Function ArrayCompress(ByRef argAry() As t駒台) As Variant() | '駒台の配列(1 To 7)の使っていない要素を圧縮します |
| cls駒台 | 特定局面再現 | Public | Sub Function | 92 | Public Sub 特定局面再現(ByRef aAry駒台() As Variant, ByVal arg手数 As Long) | '静的配列のpAry駒への代入が出来ない為、一つずつ入れています。 |
| cls駒台 | 盤面履歴手数戻し | Private | Sub Function | 101 | Private Sub 盤面履歴手数戻し() | |
| cls将棋盤 | Class_Initialize | Private | Sub Function | 12 | Private Sub Class_Initialize() | |
| cls将棋盤 | Class_Terminate | Private | Sub Function | 19 | Private Sub Class_Terminate() | |
| cls将棋盤 | 現在盤面 | Public | Property Get | 29 | Public Property Get 現在盤面(Optional ByVal arg手数 As Long = 0) As String() | |
| cls将棋盤 | 盤面履歴 | Public | Property Get | 60 | Public Property Get 盤面履歴() As Collection | |
| cls将棋盤 | 棋譜履歴 | Public | Property Get | 64 | Public Property Get 棋譜履歴() As Collection | |
| cls将棋盤 | 棋譜 | Public | Property Get | 68 | Public Property Get 棋譜() As String | |
| cls将棋盤 | 棋譜最終 | Public | Property Get | 72 | Public Property Get 棋譜最終() As String | |
| cls将棋盤 | 消費時間 | Public | Property Get | 76 | Public Property Get 消費時間() As String | |
| cls将棋盤 | 開始時刻 | Public | Property Get | 80 | Public Property Get 開始時刻() As Date | |
| cls将棋盤 | 最終時刻 | Public | Property Get | 84 | Public Property Get 最終時刻() As Date | |
| cls将棋盤 | 手数 | Public | Property Let | 88 | Public Property Let 手数(ByVal Value As Long) | |
| cls将棋盤 | 先手 | Public | Property Let | 96 | Public Property Let 先手(ByVal Value As Boolean) | |
| cls将棋盤 | 駒 | Public | Property Set | 103 | Public Property Set 駒(ByVal arg位置 As g位置, ByVal arg駒 As cls駒) | |
| cls将棋盤 | 駒移動可能位置 | Public | Sub Function | 115 | Public Function 駒移動可能位置(ByVal arg位置 As g位置) As Collection | '駒が移動できる位置をg位置(行、列)のCollectionで返す |
| cls将棋盤 | 着手 | Public | Sub Function | 120 | Public Sub 着手(ByVal arg駒名 As String, ByVal arg元位置 As g位置, ByVal arg先位置 As g位置, ByVal arg先手 As Boolean) | |
| cls将棋盤 | 特定局面再現 | Public | Sub Function | 164 | Public Sub 特定局面再現(ByRef aAry駒() As cls駒, ByVal arg手数 As Long) | '静的配列のpAry駒への代入が出来ない為、一つずつ入れています。 |
| cls将棋盤 | 終局判定 | Public | Sub Function | 175 | Public Function 終局判定() As Boolean | |
| cls将棋盤 | 手番交代 | Private | Sub Function | 184 | Private Sub 手番交代() | |
| cls将棋盤 | 成り判定 | Private | Sub Function | 188 | Private Function 成り判定(ByRef arg元位置 As g位置, ByVal arg先位置 As g位置, ByRef arg成り As Boolean) As Boolean | |
| cls将棋盤 | 盤面履歴手数戻し | Private | Sub Function | 216 | Private Sub 盤面履歴手数戻し() | |
| g位置 | NewPos | Public | Sub Function | 6 | Function NewPos(Optional ByVal arg行 As Variant, Optional ByVal arg列 As Variant) As g位置 | |
| cls将棋進行 | ゲーム開始 | Public | Sub Function | 49 | Public Sub ゲーム開始(Optional ByVal arg手合い As String, Optional ByVal arg大橋流 As Boolean) | |
| cls将棋進行 | ゲーム終了 | Public | Sub Function | 106 | Public Sub ゲーム終了() | |
| cls将棋進行 | 特定局面再現 | Public | Sub Function | 110 | Public Sub 特定局面再現(ByVal arg手数 As Long) | |
| cls将棋進行 | Class_Initialize | Private | Sub Function | 130 | Private Sub Class_Initialize() | |
| cls将棋進行 | Class_Terminate | Private | Sub Function | 137 | Private Sub Class_Terminate() | |
| cls将棋進行 | xlApp_SheetSelectionChange | Private | Sub Function | 145 | Private Sub xlApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) | 'WithEventsのxlAppのイベント |
| cls将棋進行 | 駒配置 | Private | Sub Function | 173 | Private Sub 駒配置(ByVal arg手合い As String, ByVal arg大橋流 As Boolean) | '大橋流でゆっくり駒を並べます。 |
| cls将棋進行 | 棋譜位置 | Private | Sub Function | 263 | Private Function 棋譜位置(ByVal arg列 As Integer, ByVal arg行 As Integer) As g位置 | '棋譜の筋・段を配列の行・列に変換 |
| cls将棋進行 | 駒選択将棋盤 | Private | Sub Function | 273 | Private Sub 駒選択将棋盤() | '盤内を選択した時に駒選択と移動可能位置の色設定を行う '移動可能位置をクリックした場合は着手し駒を移動する |
| cls将棋進行 | 駒選択駒台 | Private | Sub Function | 313 | Private Sub 駒選択駒台() | '駒台を選択した時に選択した駒の色を変更 |
| cls将棋進行 | 着手 | Private | Sub Function | 347 | Private Sub 着手(ByVal arg元選択 As Range, ByVal arg先選択 As Range) | '駒選択後に移動可能位置を選択したら着手します |
| cls将棋進行 | 盤面表示 | Private | Sub Function | 378 | Private Sub 盤面表示(Optional arg手数 As Long) | '盤面配列をシートに表示する |
| cls将棋進行 | 選択解除 | Private | Sub Function | 450 | Private Sub 選択解除() | '前回選択と今回選択を消去して選択状態を解除 |
| cls将棋進行 | 選択セルを手番に移動 | Private | Sub Function | 456 | Private Sub 選択セルを手番に移動() | '次のSheetSelectionChangeが効くように先手後手の位置へ選択セルを移動させる |
| cls将棋進行 | 駒移動可能位置色変更 | Private | Sub Function | 463 | Private Sub 駒移動可能位置色変更(ByVal argCol As Collection) | '駒を選択した時に駒の移動可能位置の色設定を行う |
| cls将棋進行 | 駒移動可能 | Private | Sub Function | 476 | Private Function 駒移動可能(ByVal arg元選択 As Range, ByVal arg先選択 As Range) As Boolean | '駒選択後の次のクリックが移動可能場所かの判定 |
| cls将棋進行 | セル2位置 | Private | Sub Function | 491 | Private Function セル2位置(ByVal argRng As Range) As g位置 | 'セル選択位置を配列の位置に変換 |
| cls将棋進行 | 配列180度回転 | Private | Sub Function | 499 | Private Function 配列180度回転(ByRef argAry) As Variant | '2次元配列を180度回転させる:実引数はRangeを想定 |
| cls将棋進行 | 移動可能範囲 | Private | Sub Function | 513 | Private Function 移動可能範囲(ByVal arg元位置 As g位置, ByVal arg先位置 As g位置) As Boolean | '移動可能範囲を判定してTrue/Falseで返す |
| cls将棋進行 | 選択場所 | Private | Sub Function | 526 | Private Function 選択場所(ByVal argRange As Range) As e場所 | '選択場所をEnumで返す |
| cls将棋進行 | 終局判定 | Private | Sub Function | 543 | Private Function 終局判定() As Boolean | '玉の詰み判定し、詰んでいれば終局 |
| cls将棋進行 | シート消去 | Private | Sub Function | 552 | Private Sub シート消去() | |
| cls将棋進行 | シート名前定義 | Private | Sub Function | 566 | Private Sub シート名前定義() | |
| cls将棋進行 | シート書式設定 | Private | Sub Function | 589 | Private Sub シート書式設定() | |
| cls棋譜 | Class_Initialize | Private | Sub Function | 11 | Private Sub Class_Initialize() | |
| cls棋譜 | Class_Terminate | Private | Sub Function | 19 | Private Sub Class_Terminate() | |
| cls棋譜 | 先手 | Public | Property Get | 23 | Public Property Get 先手() As Boolean | |
| cls棋譜 | 棋譜履歴 | Public | Property Get | 28 | Public Property Get 棋譜履歴() As Collection | |
| cls棋譜 | 棋譜 | Public | Property Get | 32 | Public Property Get 棋譜() As String | |
| cls棋譜 | 棋譜最終 | Public | Property Get | 39 | Public Property Get 棋譜最終() As String | |
| cls棋譜 | 消費時間 | Public | Property Get | 44 | Public Property Get 消費時間() As String | |
| cls棋譜 | 手数 | Public | Property Let | 51 | Public Property Let 手数(ByVal Value As Long) | |
| cls棋譜 | 開始時刻 | Public | Property Get | 58 | Public Property Get 開始時刻() As Date | |
| cls棋譜 | 最終時刻 | Public | Property Get | 62 | Public Property Get 最終時刻() As Date | |
| cls棋譜 | 棋譜作成 | Public | Sub Function | 68 | Public Function 棋譜作成(ByVal arg元位置 As g位置, ByVal arg駒先 As cls駒, ByRef arg成り As Boolean) As String | '棋譜はKIF形式で作成 '###1 5ニ銀成(43) (mm:ss/hh:mm:ss) |
| cls棋譜 | KIF駒名変換 | Private | Sub Function | 110 | Private Function KIF駒名変換(ByVal arg駒先 As cls駒, ByRef arg成り As Boolean) As String | |
| cls棋譜 | 棋譜履歴手数戻し | Private | Sub Function | 128 | Private Sub 棋譜履歴手数戻し() | '棋譜履歴:手数戻しに対応 |
| frm棋譜 | Parent | Public | Property Set | 9 | Public Property Set Parent(ByVal argParent As cls将棋進行) | |
| frm棋譜 | btn棋譜出力_Click | Private | Sub Function | 16 | Private Sub btn棋譜出力_Click() | |
| frm棋譜 | btn対局開始_Click | Private | Sub Function | 33 | Private Sub btn対局開始_Click() | |
| frm棋譜 | lst棋譜_Change | Private | Sub Function | 39 | Private Sub lst棋譜_Change() | |
| frm棋譜 | UserForm_Initialize | Private | Sub Function | 45 | Private Sub UserForm_Initialize() | |
| frm棋譜 | 棋譜表示 | Public | Sub Function | 64 | Public Sub 棋譜表示(ByVal arg棋譜 As Collection, ByVal arg開始時刻 As Date, ByVal arg最終時刻) | |
| frm棋譜 | 棋譜追加 | Public | Sub Function | 82 | Public Sub 棋譜追加(ByVal arg棋譜 As String) | |
| frm棋譜 | 先手後手表示 | Private | Sub Function | 90 | Private Sub 先手後手表示() | |
| frm棋譜 | UserForm_QueryClose | Private | Sub Function | 94 | Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) | |
| frm棋譜 | UserForm_Terminate | Private | Sub Function | 101 | Private Sub UserForm_Terminate() |
この一覧は以下で紹介しているVBAを使用し自動作成したものです。
クリックで着手した時の主なプロシージャーの流れ
| 主なプロシージャーの流れを階層表示 | 補足説明 | |||
| xlApp_SheetSelectionChange | ||||
| 将棋進行クラス.xlApp_SheetSelectionChange | WithEvents | |||
| 将棋進行クラス.駒選択将棋盤 | 盤上の駒が選択された場合 | |||
| 将棋進行クラス.着手 | 移動可能位置を選択した場合 | |||
| 駒台クラス.駒追加/駒削除 | 駒を取った時/駒を打った時 | |||
| 将棋盤クラス.着手 | 盤面を履歴保存 | |||
| 棋譜クラス.棋譜作成 | 棋譜を履歴保存 | |||
| 駒台クラス.履歴追加 | 駒台を履歴保存 | |||
| 将棋進行クラス.盤面表示 | ||||
| 棋譜フォーム.棋譜表示 | ||||
履歴について
盤面・駒台・棋譜、それぞれ手数とインデックスが一致するように保存
Excel将棋のダウンロード
Excel将棋の目次
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excel将棋:棋譜選択でその時点の盤面に戻す(№13)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
