「プログラミングに興味があるけど…」
「VBAを使って作業を効率化できたらなぁ」
「プログラミング勉強したけどわからん(´・ω・)」
等々、プログラミングって結構敷居が高い!
気持ちはわかります。私は、最初にJavaを触りましたが、わからなくて何も面白くなかったです。。
でも!普段使っているExcelならわかりやすいはず!
というわけで、Excelでオセロを作ってプログラミングを楽しく学んでいきましょう。
Excelでオセロを作ろう⑦
オセロを作って楽しくプログラミングを学ぼう!
第7回では石を置ける場所を盤上のみにしていきます。
盤上のみに石を置く方法を考える
実装の前にまず石の色を交互に置いていく方法を考えていきます。
盤の上のみに置けるようにするということは、ダブルクリックされた場所が盤の上かどうかを判定すればよさそうです。
そのためには、盤を列と行で表すとどこからどこなのかを調べる必要があります。
そこで、現在のオセロを見てみます。
左上「B3」、右上「I3」、右上「B10」、右上「I10」となっていることがわかります。
それぞれ数字で表すと、左上「2,3」、右上「9,3」、右上「2,10」、右上「9,10」になります。
ここから、クリックされた位置が、縦方向では「2~9」、横方向が「3~10」の間であれば石を置くようにすればよいということがわかります。
マクロの内容追記
先ほど考えた盤上の上のみに石を置く方法をプログラムで実現していきましょう。
ダブルクリック時にセルの編集にならないようにする
前回にやらなければならないことだったのですが、ダブルクリックしたときにセルの中身にカーソルがいってしまうのを解消します。
「Worksheet_BeforeDoubleClick」メソッドの最初に下記のコードを追記してください。
Cancel = True
これでダブルクリックしたときにもセル内にカーソルが行かないようになります。
ダブルクリック時の挙動をプロシージャ化する
ここからの処理を記述するにあたりダブルクリック時に呼ばれるイベントプロシージャに直接記述するには長くなりそうなので、まずはプロシージャ化をしていきます。
「標準モジュール」→「othello」を開きます。
そこに下記のプロシージャを用意しましょう。
Sub cell_DoubleClick(ByVal Target As Range, Cancel As Boolean) End Sub
この中に「Worksheet_BeforeDoubleClick」のプロシージャの中身を移しましょう。
次に、「Worksheet_BeforeDoubleClick」から先ほど内容を移した「cell_DoubleClick」を呼び出すようにします。
下記のコードを「Worksheet_BeforeDoubleClick」に書きます。
Call othello.cell_DoubleClick(Target, Cancel)
これで今まで通りの動きをしてくれます。
盤の上であるという条件分岐を追加する
それでは、条件分岐を書いていきましょう。
書き出す条件は、縦方向では「2~9」、横方向が「3~10」です。
第6回でダブルクリックされた場所が「Target」という変数に入ってきていたことは確認済みなので、その値が条件に合致しているか判定します。
条件分岐で複数の条件を使用するためには「and」または「or」を使用していきます。
英語の意味と同じですが、「and」はかつ、「or」はまたはを表します。
よって、今回記述する条件分岐は、「縦方向が2以上かつ9以下、かつ横方向が3以上10以下」と書きます。
「cell_DoubleClick」を下記のように書き換えましょう。
Sub cell_DoubleClick(ByVal Target As Range, Cancel As Boolean) Dim cell_click_row As Integer Dim cell_click_column As Integer cell_click_row = Target.Row cell_click_column = Target.Column '盤上か判定 If cell_click_row >= 3 And 10 >= cell_click_row And cell_click_column >= 2 And 9 >= cell_click_column Then 'セル内の編集モードをキャンセル Cancel = True Dim stone As String '置く石の色を選択 If stone_count Mod 2 = 1 Then '奇数の場合 stone = "○" Else '偶数の場合 stone = "●" End If '石を置く Cells(cell_click_row, cell_click_column).Value = stone '手数をカウントアップ stone_count = stone_count + 1 Else MsgBox "盤の上ではありません。" End If End Sub
この盤上か判定する条件分岐によって、石を置くか盤上ではないメッセージを出すかを分岐することができます。
実際に動かしてみましょう。
次回の予定
次回は、条件分岐を使用して石がすでに置いてあるセルには置けないようにしていきます。
記事一覧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!①
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!②
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!③
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!④
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑤
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑥
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑦
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑨
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑩
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑫
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑬
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑭
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑮