1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

「数億規模スタートアップのCTO講師」と「エンジニアキャリア専門のポテパン」が贈る、実践型Rubyスクール。

【ExcelVBA入門】VBAで数当てゲームを作る方法をご紹介します!

Pocket

ルール

・4枚のカードに0~9までのいずれかの数字が入っている。

・複数のカードに同じ数字は入っていない。

・数字だけが合っている場合は△、数字と場所の両方合っている場合は〇を表示する。

(数字も場所も違っている場合は×を表示する。)

・4枚全てのカードの数字と場所を当てることができればクリア

下準備

まずは図のように数字を入力するための枠を作りましょう。

そして各枠のセルをクリックした状態で『データ』タブ→『データの入力規則』を選択します。

入力値の種類に『リスト』を設定し、『元の値』に0~9までの数値をカンマ区切りで入力します。

4枚のカードに0~9までの数字を指定できるようになりました。

4つのカードに数をセット

それでは、いよいよ新規のプロシージャ『Number_Game_Start』を作成してコードを書いていきます。

<コード①>

<解説>

最初にBase_Noという名称でコレクションオブジェクトを定義します。

コレクションは複数のデータを管理できるので配列と非常に似ていますが、要素数を必要に応じて

追加したり削除したりできるという便利な機能を持っています。

また、カードの数字を格納する配列やインデックスを取得する配列も準備しておきます。

<コード②(コード①の続き)>

<解説>

ループ処理でコレクションに0~9までの数字を入力します。

要素の追加はAddメソッドで行い、半角スペースを開けて設定したいデータの値を指定します。

<コード③(コード②の続き)>

<解説>

最初にint_MAXにコレクションのインデックス数を格納します。

そしてループ処理で4枚のカードの値となる配列に順番にコレクションの値を入れていきます。

この時Rndを使用してランダムにコレクションの要素を指定するインデックスを取得しています。

(コレクションのインデックスは1から始まる点にもご注意ください。)

そして、配列に格納し終えた要素はRemoveメソッドでコレクションから削除しています。

この処理により4枚のカードに0~9までの数をランダムに、重複することなく取得することができました。

<コード④(コード③の続き)>

<解説>

それでは、配列に取得した値をセルに書き出してみましょう。

コード①~④を記述したプロシージャをボタンに登録して実行すると

指定したセルに4つの数字がランダムに設定されることが確認できるでしょうか。

<実行結果>

クリア判定

新しいプロシージャ『Number_Check』を作成してクリア判定機能を追加します。

<コード①>

<解説>

変数target_Colにカードの列数を、answer_Colに解答の列数を設定して

ループ処理でチェックを行います。

レイアウト上各セルの間に1列空白の列が入っているので、Step2で2列ごとにチェックを行います。

また、ヒントの初期値は“×”とします。

ここまで記述したらCheckボタンに上記コードを登録して結果を確認してみましょう。

続けてコード①のループ処理の内部にチェック処理を記述していきます。

<コード②>

 

<解説>

まずはIF文でカードの番号と解答の番号が一致しているかをチェックします。

一致している場合、さらに内部のIF文で列番号が一致している場合は〇を、

数字が一致しているが場所は一致していないという場合は△を表示するようにします。

不具合を入力チェックで排除

ところで、ここまでのコードには1つ問題点があります。

カードを全て未入力にしてCheckボタンを押すとヒントには全て×が表示されるはずですが、

解答に0が含まれている場合は下記の様に〇や△が表示されてしまうのです。

これは、VBAではセルが空白の場合は0と判定されてしまうことによる現象です。

この場合はカードが未入力のままチェックが行われることを防ぐ処理を入れることにより

不具合を解消することができます。

<コード④:変数定義の直後に記述>

<実行結果>

様々な数字を入力し、チェック機能が問題なく組み込まれていることを確認したら

解答が見えている行は非表示にしておきましょう。

最後に、プロシージャの終端にクリア判定の処理を入れると数当てゲームの完成です。

<コード⑤>

<実行結果>

まとめ

数当てゲームは数字と場所のチェック機能を組み込むことと、思わぬ不具合を防止するために

入力チェックを入れることがポイントです。

また、カードの枚数を増やしていくとより難度の高いゲームを作ることができるので

ぜひコードをアレンジして試してみてください。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る