オセロを作りながらマクロVBAを学ぼう№5
ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第5回です。
これからは、ゲームとしての機能を一つずつ追加していきます。
まずは、石を置ける場所の色を変更してわかりやすくしてみます。
シートに項目を追加と手直しをします。
このままでは、シートの修正が出来ません。
![マクロVBA参考画像](image23.jpg)
![マクロVBA参考画像](image24.jpg)
![マクロVBA参考画像](image28.jpg)
色と文字は自由に設定して構いません。
![マクロVBA参考画像](image.jpg)
L3 : 「後番石」と名前定義
P2 : 「ベース色」と名前定義
P3 : 「置ける場所色」と名前定義
![マクロVBA参考画像](image30.jpg)
M7 : このセルは、文字サイズだけ大きく(24ポイントに)してください。
![マクロVBA参考画像](image110.jpg)
では、石を置ける場所の色を変更します。
Private Sub btn1_Click()
Unprotect
Set TargetSheet = Sheet1
Call 対戦開始
Protect
End Sub
前回までは、初期配置の石を置くVBAコードだけをそのまま書いていました。
ゲームスタートとしての機能に変更します。
また、石を置く処理は今後は度々使う必要が出てきます。
そこで、専用のSubプロシージャーがあったほうが便利です。
最初に、先手番の石が、今回の手番の石になるようにします。
Public変数に、手番として置く石と相手の石を、共通変数設定します。
そして、初期配置の4つの石を置く。
石が置かれたら、次の手番の石を置ける場所表示(セルの色を変更)します。
Sub 対戦開始()
With TargetSheet
.Range("先番石").Copy Destination:=.Range("手番石")
.Range("手番石").Offset(, 1) = "の番です。"
.Range("盤面").ClearContents
Call 共通変数設定
Call 石を置く(.Range("盤面").Cells(4, 4), 置く石)
Call 石を置く(.Range("盤面").Cells(5, 5), 置く石)
Call 石を置く(.Range("盤面").Cells(4, 5), 相手石)
Call 石を置く(.Range("盤面").Cells(5, 4), 相手石)
Call 置ける場所表示
End With
End Sub
Sub 共通変数設定()
Set TargetSheet = Sheet1
With TargetSheet
If .Range("手番石").Font.Color = .Range("先番石").Font.Color Then
Set 置く石 = .Range("先番石")
Set 相手石 = .Range("後番石")
Else
Set 置く石 = .Range("後番石")
Set 相手石 = .Range("先番石")
End If
End With
End Sub
Sub 石を置く(ByVal ToRng As Range, FromRng As Range)
With TargetSheet
ToRng.Value = FromRng.Value
ToRng.Font.Size = FromRng.Font.Size
ToRng.Font.Color = FromRng.Font.Color
End With
End Sub
Sub 置ける場所表示()
Dim myRng As Range
With TargetSheet
.Range("盤面").Interior.Color = .Range("ベース色").Interior.Color
For Each myRng In .Range("盤面")
If is置ける全方向(myRng) Then
myRng.Interior.Color = .Range("置ける場所色").Interior.Color
End If
Next
End With
End Sub
対戦開始
先手番の石を今回の手番の石にする。
盤面を初期クリア。
共通変数設定をCallします。
初期配置の4石を置きます。
ける場所表示をCallします。
手番の石を判定し、置く石と相手の石を設定します。
指定された石(手番石or相手石)を、指定の場所に置きます。
Subプロシージャーの括弧()の中に引数が指定されています。
これはCallしているプロシージャーが、Callされるプロシージャーに引数を渡しています。
ここでは、オブジェクト変数であるRange型の変数を渡しています。
オブジェクト変数が渡す場合は、オブジェクトの場所を示すアドレスが渡されるものと考えて下さい。
つまり、オブジェクトそのものが渡されるわけではなく、そのオブジェクトの場所が渡されるという事です。
盤面全体を初期の色にします。
石が置けるかどうか、盤面全体のセルを全て判定します。
判定には、前回作成した、
「is置ける全方向」
これで判定し、置けると判定されたら色を設定します。
初期配置の4石がおかれ、先手番の黒石のおける場所のセル食が変更された状態になります。
![マクロVBAサンプル画像](image7.jpg)
いよいよ次回は、黒石白石を交互に打てるようにします。
もちろん、相手の石を挟んでいる場所は、自分の石に取り替えます。
さて、いよいよゲームらしくなっていきます。
全体の目次
ここまでのサンプルファイルのダウンロード
新着記事NEW ・・・新着記事一覧を見る
正規表現関数(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)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
アクセスランキング ・・・ ランキング一覧を見る
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.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.並べ替え(Sort)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- オセロを作りながらマクロVBAを学ぼう№5
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。