0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

『Excelでリバーシを作ろう!! マクロ、VBAを1から学ぶ』サンプル(4) 【三目並べ:3. クリックで石が置けるようにする】

Last updated at Posted at 2022-04-10

この記事は 『Excelでリバーシを作ろう!! マクロ、VBAを1から学ぶ』 のサンプルです。

前:【三目並べ:2. ゲームスタートの処理】
https://qiita.com/sano192/items/af1b85dc68307320be7c

次:【三目並べ:4. 手番を変える】
https://qiita.com/sano192/items/d1c08ff7a1221bcc6dcb

Excelのマクロ(VBA)で「三目並べ」「マインスイーパー」「リバーシ」を作る解説本です!
プログラミングが全くわからない人でも大丈夫! 丁寧な解説と図でしっかり理解しながら楽しくプログラミングを学ぶ事ができます!
値段:300円(Kindle Unlimited対象)

【kindle】

【booth(pdf】

次に盤面をクリックしたら石が置けるようにする処理を書きます。
 
コードを書く画面に戻り、「(General)」と書かれた部分をクリックして「WorkSheet」を選択してください。
23.PNG

そうすると自動的に以下のようなコードが挿入されたと思います。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

別のコードが挿入されたという人は、「WorkSheet」の右側から「SelectionChange」を選択してください。
24.PNG

この部分には「選択されているセルが変更されたら」行う処理を記載します。
 
まず選択されたセルの行番号,列番号を取得しましょう。選択されたセルはTargetなので、以下のように書くことで行番号,列番号を取得できます。
 
行番号 = Target.Row
列番号 = Target.Column
 
Rowは行、Columnは列の意味です。
 
行番号,列番号は「変数」という箱に入れておきます。自分で名前をつけた箱を作り、そこに数字やら文字やらを入れたり取り出したりするイメージです。
行を入れる箱の名前を「Gyou」
列を入れる箱の名前を「Retu」
としましょう。
変数の名前は必ず英数字でなければなりません。日本語は使えないので注意してください。
 
変数はまず「この変数(箱)を用意します」と宣言します。
※宣言しなくても使えなくはないのですが、後々めんどうが多くなるのでできるだけ宣言しておきましょう。
 
宣言は
 
Dim 変数名
 
と書きます。「Gyou」「Retu」を宣言するなら以下のようになります。
※ここからのコードはPrivate Sub Worksheet_SelectionChange~End Subの間に記載してください

Dim Gyou, Retu

これで「Gyou]「Retu」という箱を用意できました。この箱に行番号、列番号を入れます。
以下のようなコードになります。

Gyou = Target.Row
Retu = Target.Column

これでGyouに選択されたセルの行番号,Retuに選択されたセルの列番号が入りました。
 
では選択されたセルに石を置く、つまり「●」「○」を入力するよう処理を書きましょう。
とりあえず黒石、「●」を入力してみます。
(「まる」で変換すれば「●」が出てきます)

Cells(Gyou, Retu) = "●"

ここまでをまとめると以下のようになっています。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Gyou, Retu

    Gyou = Target.Row
    Retu = Target.Column

    Cells(Gyou, Retu) = "●"

End Sub

ではちゃんと機能するかテストしましょう。
エクセルの画面に戻っててきとうなセルをクリックしてみてください。
「●」が入力されれば成功です。
25.PNG
ちゃんと「●」が入力されました!
もし、↓図のようにコード上で黄色のマーカーが引かれている、という人がいれば、それはコードがエラーによって停止していることを意味します。
一度左上の「■」(停止)マークを押してコードの実行を止め、コードを修正して再度テストしてみましょう。
26.PNG
さて、ちゃんと「●」は入力されたのですが……盤面以外の場所でもクリックすると入力されてしまいます……。
これは問題なのでコードを修正しましょう。
 
セル(B2)~セル(D4)をクリックしたときだけ処理を行い、それ以外のときは無視するという処理に修正します。
ここで「条件分岐」という方法を使います。
 
条件分岐はある条件を満たすなら→処理を行うというように処理に条件付を行う方法です。
書き方は以下です。
 
If 条件 Then
 
~処理内容~
 
End If
 
処理したい条件、内容は以下のようになります。
条件:セル(B2)~セル(D4)をクリックした場合
処理内容:「●」を入力する

条件:セル(B2)~セル(D4)をクリックした場合
というのは言い換えると
条件:行番号が2以上 かつ 行番号が4以下 かつ 列番号が2以上 かつ 列番号が4以下
となります。
 
この条件は以下のように書けます。

If 2 <= Gyou And Gyou <= 4 And 2 <= Retu And Retu <= 4 Then

以上という条件は「<=」と書きます。「=<」と書くとエラーになるので注意してください。
行番号が2以上4以下という条件は「2<=Gyou<=4」と書きたくなりますがそれもエラーです。「2以上」「4以下」という条件はそれぞれ分けて書きます。
「かつ」という条件は「And」で表現します。4つの条件を「And」でつなげればOKです。
 
次に処理内容です。
処理内容:「●」を入力する
これは先程書いたコードと全く同じですから以下のようになります。

Cells(Gyou, Retu) = "●"

If~End Ifの間に書くコードは必ずインデントをIfより下げるようにしてください。
インデントを下げないとエラーになるというわけではないのですが、見やすさが大きく向上し、間違いを減らすことが出来ます。
 
Ifを書いたときのよくある間違いとして
・Ifの条件を書いた後、Thenを忘れる
・最後のEnd Ifを忘れる
というものがあります。Ifを書いてエラーが出たらまずこの2つを確認しましょう。
 
まとめると以下のようになります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Gyou, Retu

    Gyou = Target.Row
    Retu = Target.Column
   
    If 2 <= Gyou And Gyou <= 4 And 2 <= Retu And Retu <= 4 Then

        Cells(Gyou, Retu) = "●"

    End If

End Sub

セル(B2)~セル(D4)をクリックしたときだけ「●」が入力され、それ以外のセルをクリックしてもなにも起きなければ成功です。
 
【ここまでのコード】

Sub GameStart()

    Range("B2", "D4").ClearContents
    Cells(2, 6) = "黒番"

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Gyou, Retu

    Gyou = Target.Row
    Retu = Target.Column

    If 2 <= Gyou And Gyou <= 4 And 2 <= Retu And Retu <= 4 Then

        Cells(Gyou, Retu) = "●"

    End If

End Sub

前:【三目並べ:2. ゲームスタートの処理】
https://qiita.com/sano192/items/af1b85dc68307320be7c

次:【三目並べ:4. 手番を変える】
https://qiita.com/sano192/items/d1c08ff7a1221bcc6dcb

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?