Excelでゲームを作る時のヒント(その1)
Excel(Excel2010ベース)を使って簡単なゲームを作成する時のヒントをご紹介します。
★どんなゲームが作れるのか? 最下段をご参照下さい。
★Excel2013/16/19/21では動作しない場合があります。
ExcelのマクロやVisual Basicなどを使えば高度なゲームを作成することが出来ますが、
ここでは「関数のみ」に限定し、初心者+αでも取り組みやすいものを取り上げます。
(その分、ゲームはシンプルなものに限定されます)。
1.乱数(Random Numbers)
乱数は無作為に作られる[数]のことです。例えば「サイコロの目」。1~6の数字が無作為で作られます。①乱数を発生させる関数
Excelで乱数を作る(発生させる)には関数を使いますが、関数は2つあります。
a)[ =RAND() ]:0~1の間の実数の乱数を作ります。引数はありません。 0≦[ =RAND() ]<1
b)[ =RANDBETWEEN(m,n) ]:m~nの間の整数の乱数を作ります。
「サイコロの目」を作りたい場合は、=RANDBETWEEN(1,6) などと設定します。
実数の乱数が必要でなければ、[ =RANDBETWEEN(m,n) ]を使う方が分かりやすいと思います。
②乱数の発生するタイミング
乱数は、Excel起動時や任意のセルの内容が変化した時に自動的に作られます。
従って、何らかの形でセルの内容を変化させれば次々と新しい乱数を作ることが出来ます。
他にあまり聞き慣れない[循環参照]があります。
これは、数式が入力されているセル自体を数式の中で参照している状態を言います。
例えば、セル[A1]に[=A1+1]を入力した状態です。この式を計算すると無限大に発散してしまいます。
Excelでは発散を防止するため「循環参照」の場合は「循環参照に関する警告」を出します。
(身に覚えのある方もいらっしゃるかもしれません)。
繰り返しの最大回数および許容可能な変化の量は指定できます。
繰り返しの最大回数(最大反復回数)を指定することにより、
上述の循環参照における無限大の発散を最大反復回数で止めることが出来ます。
最大反復回数は次のようにして指定します。
[ファイル]=>[オプション]=>[数式]=>[計算方法の設定]で=>[反復計算を行う]にチェックを入れ=>
[最大反復回数]を設定します。
循環参照と反復計算を組み合わせると、カウンター(数や回数を数える)として使えます。
また所定の回数(最大反復回数)だけ動作させることが出来ます。
賢明なる諸氏は既にお分かりになったと思いますが、例えば、
セル[A1]に =IF(A1=A1,RANDBETWEEN(0,9),A1) (セル[A1]に循環参照を使って0~9の数字を発生させる)
セル[B1]に =IF(B1=B1,RANDBETWEEN(0,9),B1) (セル[B1]に、同上)
セル[C1]に =IF(C1=C1,RANDBETWEEN(0,9),C1) (セル[C1]に、同上)
を入力し、
分かりやすいようにフォントサイズを[72]程度に設定し、
最大反復回数を例えば1000程度に設定し、
任意のセルにデータ(数字でも文字ても可)を入力し[Enter]キーを押せば、数字が目まぐるしく変わり、
最大反復回数だけ繰り返された後停止します。
これが「エクセルでスロットマシン」、「エクセルでナンバーズ」の主な仕掛です。
(動画はYouTubeを参照して下さい)
その為にいちいちセルにデータを入力するのは大変です。
簡単にセル内容を変えるには[チェックボックス(フォームコントロール)]を使うといいでしょう。
[チェックボックス]は[開発]タブの[挿入]グループの[挿入▼]の中にあります。
(注)[開発]タブは標準では表示されていないので、
[ファイル]=>[オプション]=>[リボンのユーザー設定]=>[コマンドの選択]で[すべてのタブ] を選び
[開発]を選択して=>[追加]。
[チェックボックス]の上で右クリックし=>[コントロールの書式設定]=>[リンクするセル]を適当に指定します。
[チェックボックス]にチェックを入れると、リンクするセルには[TRUE]
[チェックボックス]のチェックを外すと、リンクするセルには[FALSE]
がセットされます。
[チェックボックス]のON/OFFでセルの内容が変化し、新たに乱数を作ることが出来るというわけです。
文字や記号を使うことも出来ます。乱数と文字や記号を対応させます。
例えば、=RANDBETWEEN(1,4) で 1~4 の数字を発生させ、
乱数 [1]を[(♥]、[2]を[♦]、[3]を[♠]、[4]を[♣]に対応させ表示させると言った具合です。
乱数と文字や記号を対応させるには、関数を使うと便利です。
① =CHOOSE(インデックス,値1,値2,‥) 関数を使う
・インデックスは、乱数そのもの、または乱数の入っているセルアドレス
・値は、乱数に対応する文字や記号(数字も可)です(文字や記号の場合は""で囲みます)。
例: =CHOOSE(RANDBETWEEN(1,4),"♥","♦","♠","♣")
② =INDEX(配列,行番号,列番号)関数を使う
文字又は記号を行方向(又は列方向)に並べておき(配列を作り)、
行番号(または列番号)に対応する乱数の値に応じて、配列中から取り出すものです。
例:
セル[A1]からセル[A4]に、順に ♥, ♦, ♠, ♣を入力しておき、セル[B1]に
=INDEX(A1:A4,RANDBETWEEN(1,4),1) を入力すると、セル[B1]には乱数に応じた記号が表示されます。
(注1)乱数は別セルに作り、=CHOOSE(),=INDEX()関数内ではそのセルアドレスを指定したほうが
式が短くなり分かりやすいかもしれません。
(注2)フォント[Wingdings]などの記号と特殊文字も使用可能ですが、
あらかじめセルの書式をそのフォントに設定しておく必要があります。
「エクセルでじゃんけんポン」はこの仕掛けを使っています。
=CHOOSE(RANDBETWEEN(1,3),"✊","✌","✋")
残りのヒントは「Excelでゲームを作る時のヒント(その2)」で紹介します。
エクセルで作成したゲームの一例
YouTubeに公開していますのでご参照ください。
また、[Excelゲーム集(Excel Game Collection)]で
上記以外のゲームも公開していますので、ダウンロードして研究してみてください。
乱数は、Excel起動時や任意のセルの内容が変化した時に自動的に作られます。
従って、何らかの形でセルの内容を変化させれば次々と新しい乱数を作ることが出来ます。
2.循環参照
Excelには、セルの参照方法として「相対参照」と「絶対参照」があるのはご存知の通りです。他にあまり聞き慣れない[循環参照]があります。
これは、数式が入力されているセル自体を数式の中で参照している状態を言います。
例えば、セル[A1]に[=A1+1]を入力した状態です。この式を計算すると無限大に発散してしまいます。
Excelでは発散を防止するため「循環参照」の場合は「循環参照に関する警告」を出します。
(身に覚えのある方もいらっしゃるかもしれません)。
3.反復計算
反復計算とは、特定の数値の条件が満たされるまで繰り返し行われるワークシートの再計算のことをいいます。繰り返しの最大回数および許容可能な変化の量は指定できます。
繰り返しの最大回数(最大反復回数)を指定することにより、
上述の循環参照における無限大の発散を最大反復回数で止めることが出来ます。
最大反復回数は次のようにして指定します。
[ファイル]=>[オプション]=>[数式]=>[計算方法の設定]で=>[反復計算を行う]にチェックを入れ=>
[最大反復回数]を設定します。
循環参照と反復計算を組み合わせると、カウンター(数や回数を数える)として使えます。
また所定の回数(最大反復回数)だけ動作させることが出来ます。
賢明なる諸氏は既にお分かりになったと思いますが、例えば、
セル[A1]に =IF(A1=A1,RANDBETWEEN(0,9),A1) (セル[A1]に循環参照を使って0~9の数字を発生させる)
セル[B1]に =IF(B1=B1,RANDBETWEEN(0,9),B1) (セル[B1]に、同上)
セル[C1]に =IF(C1=C1,RANDBETWEEN(0,9),C1) (セル[C1]に、同上)
を入力し、
分かりやすいようにフォントサイズを[72]程度に設定し、
最大反復回数を例えば1000程度に設定し、
任意のセルにデータ(数字でも文字ても可)を入力し[Enter]キーを押せば、数字が目まぐるしく変わり、
最大反復回数だけ繰り返された後停止します。
これが「エクセルでスロットマシン」、「エクセルでナンバーズ」の主な仕掛です。
4.乱数を発生させるタイミングを作る
上述したように、乱数は任意のセルの内容が変化した時に新たに作られますが、その為にいちいちセルにデータを入力するのは大変です。
簡単にセル内容を変えるには[チェックボックス(フォームコントロール)]を使うといいでしょう。
[チェックボックス]は[開発]タブの[挿入]グループの[挿入▼]の中にあります。
(注)[開発]タブは標準では表示されていないので、
[ファイル]=>[オプション]=>[リボンのユーザー設定]=>[コマンドの選択]で[すべてのタブ] を選び
[開発]を選択して=>[追加]。
[チェックボックス]にチェックを入れると、リンクするセルには[TRUE]
[チェックボックス]のチェックを外すと、リンクするセルには[FALSE]
がセットされます。
[チェックボックス]のON/OFFでセルの内容が変化し、新たに乱数を作ることが出来るというわけです。
5.文字や記号を使う
「エクセルでスロットマシン」や「エクセルでナンバーズ」などは、乱数をそのまま使っていましたが、文字や記号を使うことも出来ます。乱数と文字や記号を対応させます。
例えば、=RANDBETWEEN(1,4) で 1~4 の数字を発生させ、
乱数 [1]を[(♥]、[2]を[♦]、[3]を[♠]、[4]を[♣]に対応させ表示させると言った具合です。
乱数と文字や記号を対応させるには、関数を使うと便利です。
① =CHOOSE(インデックス,値1,値2,‥) 関数を使う
・インデックスは、乱数そのもの、または乱数の入っているセルアドレス
・値は、乱数に対応する文字や記号(数字も可)です(文字や記号の場合は""で囲みます)。
例: =CHOOSE(RANDBETWEEN(1,4),"♥","♦","♠","♣")
② =INDEX(配列,行番号,列番号)関数を使う
文字又は記号を行方向(又は列方向)に並べておき(配列を作り)、
行番号(または列番号)に対応する乱数の値に応じて、配列中から取り出すものです。
例:
セル[A1]からセル[A4]に、順に ♥, ♦, ♠, ♣を入力しておき、セル[B1]に
=INDEX(A1:A4,RANDBETWEEN(1,4),1) を入力すると、セル[B1]には乱数に応じた記号が表示されます。
(注1)乱数は別セルに作り、=CHOOSE(),=INDEX()関数内ではそのセルアドレスを指定したほうが
式が短くなり分かりやすいかもしれません。
(注2)フォント[Wingdings]などの記号と特殊文字も使用可能ですが、
あらかじめセルの書式をそのフォントに設定しておく必要があります。
「エクセルでじゃんけんポン」はこの仕掛けを使っています。
=CHOOSE(RANDBETWEEN(1,3),"✊","✌","✋")
残りのヒントは「Excelでゲームを作る時のヒント(その2)」で紹介します。
エクセルで作成したゲームの一例
YouTubeに公開していますのでご参照ください。
また、[Excelゲーム集(Excel Game Collection)]で
上記以外のゲームも公開していますので、ダウンロードして研究してみてください。