Tips

【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪
2016.09.20

【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪

「プログラミングに興味があるけど…」
「VBAを使って作業を効率化できたらなぁ」
「プログラミング勉強したけどわからん(´・ω・)」

等々、プログラミングって結構敷居が高い!
気持ちはわかります。私は、最初にJavaを触りましたが、わからなくて何も面白くなかったです。。
でも!普段使っているExcelならわかりやすいはず!
というわけで、Excelでオセロを作ってプログラミングを楽しく学んでいきましょう。

Excelでオセロを作ろう⑪


オセロを作って楽しくプログラミングを学ぼう!
第9回からは石を置くことによって変わる石が存在するかどうかの判定を実装してます。
第11回は上と下方向です。

石が変わる条件のおさらい

第9回でまとめた条件をおさらいします。

成功

  • チェック方向に置いた石と反対の色の石が出てきた後に同色の石が出てきた場合

失敗

  • 置いた石からチェック方向には自分の石と色が反対の石がない場合
  • 置いた石、置いた石と色が反対の石、置いた石と色が同じ石の順が最短の変更なので、チェックする方向に盤の際から3マス目以内においてない場合
  • チェックの途中で石が置かれていないマスが出てきた場合
  • 盤の外側に出てしまう場合

これをプログラムで実現していきます。

【上方向チェック】マクロの内容追記

変わる石が存在するかどうかのチェックをしていきましょう。
今回は上方向のチェックを実装します。
左や右と違い列ではなく行を減らしていきます。

上方向の確認メソッドを作成

上方向に石が変わるか確認していくメソッドを実装します。
左方向や右方向と比べて変わるのは行が減っていくことと盤の際の場所だけなので、
解説なしで一気にメソッドを見てみましょう。

Function up_change_check(cell_row, cell_column, stone, reverse_stone)
  Dim check_result As Boolean
  check_result = False
 
  If cell_row - 2 >= LEFT_TOP_ROW Then
    If Cells(cell_row - 1, cell_column).Value = reverse_stone Then
      i = cell_row - 2
 
      Do While i >= LEFT_TOP_ROW
        If Cells(i, cell_column).Value = stone Then
          check_result = True
          Exit Do
        End If
 
        If Cells(i, cell_column).Value = "" Then
          Exit Do
        End If
 
        i = i - 1
      Loop
    End If
  End If
 
  up_change_check = check_result
End Function

上記の上方向のチェックメソッドを記述します。

%e3%83%9e%e3%82%af%e3%83%ad_up_change_check

【上方向チェック】動作確認

上方向のチェックがうまくできるか確かめる

上で作成したメソッドを石を置く前に呼び出してしっかりと動くか確認していきます。

メソッドを記述

セルがクリックされたときに呼び出されるメソッド「cell_DoubleClick」の中で石を置いたあとにチェックしてメッセージボックスを出すようにします。
右方向のチェックを動かしているのでそれを編集して上方向に修正しましょう。

If up_change_check(cell_click_row, cell_click_column, stone, reverse_stone) = True Then
  MsgBox "上側に裏返す石があります"
Else
  MsgBox "上側に裏返す石がありません。"
End If

「cell_DoubleClick」メソッド全体を見ると以下のようになっています。

%e3%83%9e%e3%82%af%e3%83%ad_cell_doubleclick_up

メソッドの動作確認

上側に裏返せる石がある状態とない状態で試してしっかりと動作する確認します。

裏返せる石がある状態

up_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d

up_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d2

裏返せる石がない状態

up_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d3

up_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d4

問題なく上側に裏返す石があるかどうかのチェックができています。

【下方向チェック】マクロの内容追記

下方向にも変わる石が存在するかどうかのチェックをしていきましょう。

下方向の確認メソッドを作成

下方向に石が変わるか確認していくメソッドを実装します。
こちらもあまり変わらないので、一気にメソッドを見てみましょう。

Function down_change_check(cell_row, cell_column, stone, reverse_stone)
  Dim check_result As Boolean
  check_result = False
 
  If cell_row + 2 <= LEFT_TOP_ROW + 8 Then
    If Cells(cell_row + 1, cell_column).Value = reverse_stone Then
      i = cell_row + 2
 
      Do While i <= LEFT_TOP_ROW + 8
        If Cells(i, cell_column).Value = stone Then
          check_result = True
          Exit Do
        End If
 
        If Cells(i, cell_column).Value = "" Then
          Exit Do
        End If
 
        i = i + 1
      Loop
    End If
  End If
 
  down_change_check = check_result
End Function

上記の下方向のチェックメソッドを記述します。

%e3%83%9e%e3%82%af%e3%83%ad_up_change_check %e3%83%9e%e3%82%af%e3%83%ad_down_change_check

【下方向チェック】動作確認

下方向のチェックがうまくできるか確かめる

上で作成したメソッドを石を置く前に呼び出してしっかりと動くか確認していきます。

メソッドを記述

セルがクリックされたときに呼び出されるメソッド「cell_DoubleClick」の中で石を置いたあとにチェックしてメッセージボックスを出すようにします。
上方向のチェックを動かしているのでそれを編集して下方向に修正しましょう。

If down_change_check(cell_click_row, cell_click_column, stone, reverse_stone) = True Then
  MsgBox "下側に裏返す石があります"
Else
  MsgBox "下側に裏返す石がありません。"
End If

「cell_DoubleClick」メソッド全体を見ると以下のようになっています。

%e3%83%9e%e3%82%af%e3%83%ad_cell_doubleclick_down

メソッドの動作確認

右側に裏返せる石がある状態とない状態で試してしっかりと動作する確認します。

裏返せる石がある状態

down_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d

down_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d2

裏返せる石がない状態

down_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d3

down_%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d4

問題なく下側に裏返す石があるかどうかのチェックができています。

次回の予定

次回は、斜めの方向へ石が変わるかチェックをしていきます。

記事一覧


【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!①
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!②
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!③
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!④
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑤
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑥
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑦
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑨
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑩
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑫
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑬
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑭
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑮

excel_VBAを学んで業務効率化!

excel-vba入門 連載

Recent News

Recent Tips

Tag Search