Excelのこととか色々

マクロをどんな Excel ファイルにも実行できるように設定して、3秒かかる操作も1秒で完了。あといろいろ書いてみます・・・

【Excelでじゃんけんゲームを作ろう03】

【Excel/VBAでじゃんけんゲーム03】

f:id:tuna-kichi:20200418165306p:plain

 

じゃんけんゲームの続き第3回です。

今回はマクロを記述していきます。

 

新規フォームの出し方から、ラベルの作成まではこちら↓
www.tuna-kichi.com

 

第2回目 残りのコマンドボタンなどの作成、配置はこちら↓

www.tuna-kichi.com

 

  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 

マクロの前に

忘れ物がありましたので、マクロに行く前に追加してください。

ここに表示させる「イメージ」を同じフォームに追加しておきます。

f:id:tuna-kichi:20200425155750p:plain

 

こんな感じで。

f:id:tuna-kichi:20200505110043p:plain

 

ここに表示させるイメージは、ネットから拾ったり、(著作権とか問題なければ)

自分の手を写真で撮ったり、

私のように Excel とペイントを使って絵をかいたりして用意してください。

形式は bmp(ビットマップ) にしてください。

 

※bmpでない画像の場合は、一度、ペイントに張り付けると

【保存】するときに拡張子を選択できるので、 bmp で保存してください。

 

 ツールボックスからイメージをフォームに追加して、

f:id:tuna-kichi:20200425160102p:plain

 

プロパティの【Picture】の【…】をクリックすると、フォルダが開くので、

用意した じゃんけんのイメージを選択してください。

 f:id:tuna-kichi:20200505111015p:plain

 

それぞれのイメージに対して以下のようにプロパティを調整してください。

(大きさ(Height, Width)はお任せします)

オブジェクト名 Visible Height Width
imgRock False 30 30
imgScissors False 30 30
imgPaper False 30 30

Height・・・高さ(発音は「ハイト」)

Width・・・幅(発音は with と同じ「ウィズ」)

False・・・うそ、偽物(ここでは「電源をOFFにする」の様な意味で使われます)

 

マクロ

ここからコマンドボタンや、Initialize のマクロを書いていきます。

閉じる

まずは、一番簡単で最初に作っておくと便利な「閉じる」から。

フォームに作った【閉じる】のボタンをダブルクリックすると、

VBEが開くので、そのなかに 「End」と書くだけ

****************************************************************
Private Sub cmdClose_Click()
  End
End Sub
****************************************************************

 

User form Initialize (フォームの初期化)

フォームが起動するたびに、数値とかを初期させます。

フォームの空いているスペースをダブルクリックしてから、

下の図のように変更してください。

f:id:tuna-kichi:20200321180439p:plain

**********************************************************************************
Private Sub UserForm_Initialize()
'ここで勝敗表の「勝」「負」「分」の数値を「0」(ゼロ)に設定します

  lblWin.Caption = 0
  lblDraw.Caption = 0
  lblLose.Caption = 0

End Sub
**********************************************************************************

Caption・・・短い説明文、字幕(ここではラベルに表示する文字列)

 

リセット

リセットもフォームの初期化と同じコードを使いましょう。

そのままコピペで。

**********************************************************************************
Private Sub cmdReset_Click()

  lblWin.Caption = 0
  lblDraw.Caption = 0
  lblLose.Caption = 0

End Sub
**********************************************************************************

 

オプションボタン(グー・チョキ・パー)

オプションボタンで選択したグー・チョキ・パーのイメージを表示させます。

それぞれのオプションボタンに「Rock」の部分を変えて記述してください。

****************************************************************
Private Sub opRock_Click()

  If opRock = True Then
    imgYou.Picture = imgRock.Picture
  End If

End Sub
****************************************************************

 

ぽん

最後に勝敗の判断とコンピュータが選択した手のイメージを

表示させるコードです。

ちょっと長いです。

****************************************************************

Private Sub cmdFight_Click()

  '「あなた」の選択肢に数字を割り当てるので、この変数に数値を定義します
  Dim YouRock As Long
  Dim YouPeper As Long
  Dim YouScissors As Long

  '「Comp」の選択肢に数字を割り当てるので、この変数に数値を定義します
  Dim CompRock As Long
  Dim CompPeper As Long
  Dim CompScissors As Long

  'それぞれが選択した手を数値に置き換えるので、定義します
  Dim You As Long
  Dim Comp As Long


  'オプションで選択した手を数値に変更する
  Select Case imgYou.Picture
    Case imgRock.Picture
      You = 1

    Case imgScissors.Picture
      You = 2

    Case imgPaper.Picture
      You = 3

  End Select

  'Compの手を決めるために1-3の乱数を発生させる関数です
  Comp = Int(3 * Rnd() + 1)

  '1グー、2チョキ、3パーを割当て、イメージを表示させる
  Select Case Comp
    Case 1
      imgComp.Picture = imgRock.Picture

    Case 2
      imgComp.Picture = imgScissors.Picture

    Case 3
      imgComp.Picture = imgPaper.Picture

  End Select


  '勝敗見極め、勝敗表に数字を加算する
  Select Case You
    Case Is = 1 'グー
      If Comp = 1 Then 'Compがグー
        lblDraw.Caption = lblDraw.Caption + 1

      ElseIf Comp = 2 Then 'Compがチョキ
        lblWin.Caption = lblWin.Caption + 1

      Else 'Compがパー
        lblLose.Caption = lblLose.Caption + 1

      End If


    Case Is = 2 'チョキ
      If Comp = 1 Then 'Compがグー
        lblLose.Caption = lblLose.Caption + 1

      ElseIf Comp = 2 Then 'Compがチョキ
        lblDraw.Caption = lblDraw.Caption + 1

      Else 'Compがパー
        lblWin.Caption = lblWin.Caption + 1

      End If


    Case Is = 3 'パー
      If Comp = 1 Then 'Compがグー
        lblWin.Caption = lblWin.Caption + 1

      ElseIf Comp = 2 Then 'Compがチョキ
        lblLose.Caption = lblLose.Caption + 1

      Else 'Compがパー
        lblDraw.Caption = lblDraw.Caption + 1

      End If
  End Select

End Sub


****************************************************************

 

きっと上級者の方ならもっとスマートな書き方をされるのかもしれませんが、

私が、自分で何を書いたか理解できるマクロです。

 

学生の時に作成したマクロとは違うかもしれませんが、

同じようにじゃんけんゲームとして動作するので、OKとしてください。 

 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 

Graspyで無料プログラミング講座を受講する