エクセルのRAND()関数とRANK()関数を使ってオリジナルのビンゴカードを作成する方法

皆さんは何かの余興担当でビンゴゲームを準備したことはありますでしょうか?
ビンゴカードは100均でも売ってますし、買った方が早い場合もありますが、「エクセルで簡単に作れないかなぁ」となった方もいるんじゃないかと思います。
ビンゴカードはRAND()関数を使って、簡単に作ることができますので、今回はその方法を紹介していきます。

また今回紹介する方法を使うことで、一般的なビンゴカード(1~75の数字からランダムで24個が記載されている)だけではなく、文字や記号も入れたオリジナルのビンゴカードを作ることもできます。

私も以前50人規模の宴会の余興担当となり、クイズとビンゴを組み合わせた”QuizBingo”を企画しました。このQuizBingoはQuizKnockさんの企画をオマージュしたものです。


後半の方に概要も記載しますのでよかったらぜひ参考にしてみてください。

スポンサーリンク

【ランダムな数字を生成】RAND()関数を使う

ここでは、まずRAND()関数の使い方を説明します。RAND()関数は以下のように記載します。
=RAND()
カッコの中には何も入れなくても大丈夫です。

RAND()関数は、0~1の間(0以上1未満)の数字がランダムで自動生成される関数です。
デフォルトの設定では6桁くらいの表示ですが、小数点第15位までの精度で生成されます。

他のセルを編集したりするたびに、再評価されるので、作業をしていると結構コロコロ数字が変わるような印象になります。

またそれ以外でも、『F9』キーの再計算ショートカットを押すことで数値が更新されます。
これを利用して今回のビンゴカードのように、フォーマットを一度作ってしまえば、形は同じで中の数字が異なるカードを何個も量産することができます。

RAND()関数は数式の中に入れ込むこともできます。

例えば、『=IF(RAND() < 0.5, “成功”, “失敗”)』と入力すれば50%の確率で成功、失敗が判定されます。

その他にも、例えば『=ROUND(RAND(),6)』と入力すると0.1234560000・・・と小数点以下7桁を四捨五入して6桁の表示になります。
通常RAND()関数は小数点以下15桁の精度ですが、ROUND()関数を使えば小数点の数を四捨五入でまとめることができます。(ROUNDDOWN()関数を使うと、切り捨て処理になります。)
これを使って、GPS座標のランダム出力をして、Google Mapを使った”GeoGuessr”みたいなゲームをしたら面白ろそうですね。

RAND()関数に関連した関数としてRANDBETWEEN()関数があります。RANDBETWEEN()関数は、指定した最小値と最大値の間で整数をランダムに生成してくれます。
例えば『=RANDBETWEET(1,75)』と入力すれば1~75の整数がランダムで生成されます。

これを使えばRAND()関数とRANK()関数を組み合わせる必要がないように感じますが、このRANDBETWEEN()関数も、全く同じ数が同時に生成される可能性がある関数です。実際に1~75という狭い範囲の数を、75個同時に生成すると高確率で数字の被りが発生してしまいます。

RAND()関数はランダムな自動生成ですが、理論上は同時に全く同じ数字が生成される可能性があります。
ただしRAND()関数で生成された2つの数値が全く同じ数値になる確率は100穣分の1(1/1030)と極めて低いので、不具合が起きる可能性はほぼないといっていいでしょう。
私もいまだかつて出会ったことがありません。

【数字に順番をつける】RANK()関数を使う

RANK()関数

ここでは、まずRANK()関数の使い方を説明します。RANK()関数は以下のように記載します。
=RANK(数値,範囲,順序)

説明のために、以下のRAND()関数で生成した5つの数値を、順位付けしてB列に表示したいと思います。

まずB1のセルに数式を書く場合、RNAK()関数の数値,範囲,順序の部分にはそれぞれ以下を入力します。

数値:評価する数値を参照するのでこの場合は『A1』を入力します。
範囲:どの範囲の数値の中で順位を評価するか指定したいのでこの場合は『A1:A5』を入力します。
この時、他のセルにコピペすると参照範囲がずれるので『$A$1:$A$5』もしくは『A$1:A$5』と入力しましょう。
順序:0を入力すると降順(大きい順)で、1を入力すると昇順(小さい順)で評価されます。この順序の入力は省略可能で、何も入力しないと降順で評価されます。

RANK()関数は参照範囲の数値に全く同じ数値があると、その数値は同じ順位になります。
同じ順位の数字が2つ以上あると、その次の順位はスキップされます。

エクセルの数式で使う『$』マークは絶対参照という演算子です。$マークを使うことで参照するセルを固定することができるので複数セルに数式をコピー&ペーストする場合などに非常に便利です。
行だけ固定したい場合は『A$1』のように数字の前に$を記載します。
列だけ固定したい場合は『$A1』のようにアルファベットの前に$を記載します。
行列どちらも固定、つまり、特定のセルに固定したい場合は『$A$1』のようにアルファベットと数字のそれぞれの前に$マークを記載します。
普段は行列の固定を使用することが多いと思いますが、「片方だけの固定もできるんだ」と知っておくと役立つ場面もあるので効率よく使っていきましょう。

RANK.EQ()関数

RANK()関数と似たような関数にRANK.EQ()関数があります。記載方法や処理動作はRANK()関数とほぼ同じと考えてよいです。

RANK()関数と同様に、順位付けして同じ値がある場合、その値に対して同じ順位を付けますが、次の順位はスキップします。

RANK()関数とRANK.EQ()関数は基本的に同じ機能を持っていますが、RANK.EQ()関数は新しいバージョンのエクセルで推奨される関数です。どちらの関数も同じ結果を得られるので、旧バージョンからも使えるRANK()関数の方が汎用性が高いです。

一方で、最新のエクセルでは『RANK.AVG()関数:同じ値に対して、平均ランクを返す関数』のように関連した関数がアップデートされています。
将来的なことを考えると、最新のエクセルを使用している場合はRANK.EQ()関数を選んでおく方が、より厳密で無難だと思います。

ビンゴカードの作成手順

一般的なビンゴカード(1~75)

1.RAND()関数を使って75個のランダムな数字を生成します。
2.RANK()関数を使って、生成した75個の数字に順位付けをします。

3.エクセルを方眼セルにして5マス×5マスのビンゴカードを3枚分用意します。方眼セルは同じシート内で部分的に作成してもいいですし、別シートに印刷専用として用意してもOKです。

方眼セルの作り方は以下の記事を参考にしてください。

4.ビンゴカードのそれぞれのマスに、順位付けした75個の数値セルを参照します。


5.幹事さんの企画次第でそれぞれのビンゴカードの真ん中を、そのまま数字にしておいてもいいですし、『FREE』など書き換えてもOKです。
6.あとはお好みで塗りつぶしを使ったり、宴会名のタイトルを入れたり、効果を追加します。

これでビンゴカードは完成です。印刷は一枚ずつ行い、一回印刷するごとに、『F9』を押して、RAND()関数の数値の再生成を行いましょう。

一度に3枚分のカードを用意するのは、生成した1~75の数字がまんべんなく、どこかのカードには入るようにするためです。
生成した数字から25個だけ抜き出して1枚ずつカードを作った場合、
例えばビンゴで”74”というボールが出たときに、誰も開けられる人がいない!という偏りが出る可能性があります。
逆に数字に偏りができる可能性があるため、一度に大量のビンゴが発生してしまうかもしれません。不公平さをなくすためのちょっとした配慮です。

1~75以外を使ったオリジナルのカードを作る

エクセルでビンゴカードを作る一番のメリットは、手作り感を演出できるという点です。
また、その他のメリットとして、市販にはない1~75以外の数字や文字列を織り交ぜたビンゴカードが用意できるという点があります。

作り方は、一般的な1~75のカードと途中まで同じです。

1.RAND()関数とRANK()関数で1~75のランダムな数列を用意します。
2.通し番号の1~75を手入力で用意します。
3.通し番号の横にオリジナルの答えを書きます(数字でも文字列でもなんでもOK)。

図のようなイメージの表になります。

4.エクセルを方眼セルにして5マス×5マスのビンゴカードを3枚分用意します。方眼セルは同じシート内で部分的に作成してもいいですし、別シートに印刷専用として用意してもOKです。
5.ビンゴカードのそれぞれのマスに、VLOOKUP()関数を用いて、紐づけを行います。
例えば、一つ目のマスには『=VLOOKUP($B12,$C$12:$D$86,2,TRUE)』と記載します。
同じように二つ目のマスには『=VLOOKUP($B13,$C$12:$D$86,2,TRUE)』と記載します。

今回は本質ではないのでVLOOKUP()関数の説明を簡単におこないます。

・今回の例の『B12』はRANK()関数で順位付けした数字になります。

・『$C$12:$D$86』はVLOOKUP()関数の参照の範囲です。ここでは『通し番号』と『オリジナルの答え』が記載されている範囲全体を指定します。

・『2』はVLOOKUP()関数で参照範囲から何列目の値を返すかを指定する数字です。ここでは1列目が『通し番号』で、2列目の『オリジナルの答え』を返したいので『2』を入力します。

・『TRUE』はVLOOKUP()関数の検索方法です。
TRUE(または指定なし)で近似一致を探します。ぴったり合うものがなかった時は近いものを探すといった感じです。
逆にFALSEは完全一致を意味します。ぴったり合うものがなかった時にはエラーとなります。今回はどちらでもいいですが、念のためエラーが出ないようにTRUEを入力しています。

ここまでできれば、オリジナルのビンゴカードはほぼ完成です。

上記手順の数式の中身は下の図のような感じです。

あとはお好みで塗りつぶしを使ったり、イラストを入れたり、装飾をしてみてください。

  

おまけ:QuizBingoの概要

ここからは実際に私がQuizBingo(クイズビンゴ)の概要を紹介します。

基本ルールはビンゴと同じです。

1.ビンゴカードに書いてある数字は用意されたクイズの答えになっています。
2.席順に指名していき,指名された人は渡されたクイズメニュー(合計75問)の中からクイズを選択します。
3.クイズを選ぶ際は自身が開けたい数字が答えになりそうな問題を選びます。全く答えが分からなくても、適当に問題番号を宣言してもらうことでゲームは進行していきます。
4.例えば『Q1:富士山の標高は?』というクイズを選べば3776 (m)が開きます。

その他のルールとして

・スマホ検索は禁止
・真ん中はFREE
・リーチになったら宣言して席を立つ
・1ラインビンゴでクリア
・問題を選ぶ際は、予想する答えを言っても言わなくてもいい(言わない方が戦略的にはいい)
・出た数字は前のスクリーンに映していく(ホワイトボードとか大きめの紙に書いていってもいいですね)
・ビンゴになった順に賞品をもらう(同時にビンゴが出た場合はじゃんけんで順番を決める)

みたいな感じで進めていきました。

参加者が75人以下なら、一人1回は順番が回ってくる計算ですが、実際やってみた感じでは20問目くらいからリーチが出始めて、40問目くらいからビンゴが連発します。40人以下くらいが楽しめる規模感かなと思います。

実際のクイズの作成に当たっては、必ず数字が答えになるように問題文を考えました。
その答えもなるべく似たり寄ったりの数字になるように、1~100までの数字が答えになるものと、100~3000までの数字が答えになるもので半々くらいの分配で用意しました。

例えば
Q1:マイナス 18 ℃以下で保存されたアイスは賞味期限の記載を省略できる
Q2:「食肉小売品質基準」によって定められる牛肉の部位の数は11種類
みたいな感じです。


そうすることで、簡単には答えが分からないようになります。まあクイズノックの企画と違って、答えが分からなくても進行していくのでいいかなぁという難度設定にしました。

さいごに

ビンゴカード作る場面は限られていると思いますが(笑)、今回紹介したRAND()関数とRANK()関数の使い方は、他にも応用がききます。
例えば、チーム戦の組み合わせを決めたり、会食の席順を決めたり、自分の恣意的要素を排除できるので気持ち的にも楽かと思います。全員ランダムではなく、各テーブルに管理職1名ずつ固定して、その他のメンバーはランダム。。。なんてことももちろんできます。
状況に応じていろいろ活用してみてください。
皆さんのお仕事に少しでも役立てれば幸いです。ではまたノシ

コメント

タイトルとURLをコピーしました