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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excel将棋:棋譜選択でその時点の盤面に戻す(№13)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。