エクセルでじゃんけんゲーム MOD関数
エクセル関数
2017-04-12 10:34:07
じゃんけんゲームはちょっと大げさですが、エクセルとじゃんけんで勝負したいと思います。マクロやVBAなどは使いません。
じゃんけんはご存じない方はいらっしゃらないでしょう。お互いにぐー、ちょき、ぱーのいづれかを選んで勝ち、負け、引き分けを決めます。
ぐーはちょきにに勝ち、ちょきはぱーに勝ち、ぱーはぐーに勝つという三つ巴ですね。もちろん同じものどうしは引き分けです。
エクセルで実行するのでぐーのままでは計算できませんのでぐー、ちょき、ぱーを数値化しておきます。
仮に
ぐーを1
ちょきを2
ぱーを3
としておきます。
自分がぐーを出したいと思えば、所定のセルに1と入力します。その後エクセルが乱数を使って1か2か3の数値を所定のセルに出力します。
そしてそれぞれのセルの値を参照して勝か負けか引き分けを表示してあげれば出来上がりです。
まず、自分がぐー、ちょき、ぱーの3通り、エクセルがぐー、ちょき、ぱーの3通りあるので都合9通りのパターンがあります。IF分のネストでできそうな気がします。ネストの限界超えてますか。それ以外の関数でも9パターンの総当たりができそうですね。
とりあえず、関数の使用は横に置いて単純に数値で考えたいです。自分の数値とエクセルの数値が同じ場合引き分けです。引き分けの3つのパターンは自分の手の数値からエクセルの手の数値を引いて0の時になります。
もし、自分がぱー(3)でエクセルがちょき(2)なら
3-2=1
なので自分の手から空いての手を引いて1なら負けでいいでしょうか。
もし、自分がぱー(3)でエクセルがちょき(1)なら
3-1=2
なので自分の手から空いての手を引いて2なら勝ちでいいでしょうか。
表にしてみました。自分の手がC列です。エクセルの手が3行目です。自分手からエクセルの手を引いてみました。価値の場合は青、負けは赤引き分けは塗りつぶしなしです。
計算結果が-2,-1,0,1,2の5パターンに減りました。しかし、じゃんけんは勝か負けか引き分けの3パターンです。
これを何とか3パターンにしてみたいです。数字を3で割ったときのあまりだけを考えるとすべての数値(整数)は3で割ったときのあまりは0か1か2の3つに分けられます。
自分の手からエクセルの手を引いた数値を3で割ったときのあまりを計算してみます。
MOD関数
数値を除数で割ったときの剰余を返します。 戻り値は除数と同じ符号になります。
自分の手-エクセルの手がマイナスの場合が腑に落ちにくいですよね。一覧にするともしかしたら納得いただけるかもしれません。
A列の数をB列の数で割った余りがC 列になります。(列見出しが切れてしまいましたが左からA,B,C列です。)
6割る3であまり0、5割る3であまり2、4割る3であまり1とあまりが0,1,2と規則正しく並んでますね。割られる負が負の数でも余りは規則正しく0,1,2のどれかになります。
ということでMOD関数であまりを計算すれば3パターンにまとまりますのでifの2重のネストで何とかなりそうです。
エクセルの手の選択は乱数を使った
セルB2には手入力で1から3の数値を入れてください。
セルE2には
=int(rand()*(3))+1
が入っていますので1から3の数値がでたらめに出力されます。
セルB2には
=IF(MOD(B2-E2,3)=0,"引き分け",IF(MOD(B2-E2,3)=1,"あなたの負け","あなたの勝ち"))
が入っています。
G列とH列は数値だけでは何を出したかわからないのでただ単に、書いているだけです。
あとは、数値を入れたらぐーかぱーかちょきかわかるようにするとか、ぐーかぱーかちょきの文字を選択できるとか、結果を図形の中に表示するとか