「アップダウン」の得点表示の作り方

「アップダウン」の得点表示の作り方を解説します。

「アップダウン」とは、1回誤答すると、これまでに何問正解していようが、正解数が即0にリセットされてしまうというルールです。多くの場合は、「1回目の誤答で0点になり、2回目の誤答で失格」というルールで行われます。
これは、1963年から放送開始した視聴者参加型クイズ番組「アップダウンクイズ」に由来しています。特徴的なゴンドラ解答席や10問正解でもらえるハワイ旅行などで知られ、非常に人気の高い番組でした。
ルールのシンプルさ・求められる押しの精度の高さ・誤答でリセットというスリルからか、abcをはじめ、現在でもクイズ界では定番のルールです。

得点をリセットするという処理を行う方法はいくつか考えられますが、ここでは、各解答者の正解数の履歴を1問1問記録する方法を取ってみたいと思います。

「終わった問題」の行と「今の問題」の行を色分け表示するの続きから作っていきます。

完成品はこちらです。

【使用するExcelの機能】

・関数「OFFSET」
・関数「INDEX」

【作り方】

(正誤記録は完全に消去した状態から始めます)

①正解数カウントセル(非表示)を作る

7行目全体を選択し、セルの挿入を行います。
すると、新たに空白の6行目が作られます。

②ポイント記録テーブルを作る

正誤スルー入力セルとは別に、問題が進むごとに、その人に対応する列・その問題に対応する行のセルに、その時点でのポイントが記録されてゆくテーブルを作ります。
例によって、「本番では見えない場所」に作ります。今回はN8:U57の範囲を使います。
N列が第1枠の人、O列が第2枠の人…U列が第8枠の人に対応しているわけです。

とりあえず、N8:U57に格子を描きましょう。
(誤答数表示欄の下に空白の6行目を作り、ポイント記録テーブルに格子を書いた状態)

③ポイント記録テーブルにポイントが記録されるように設定する

ポイント記録テーブルでは、「はじめは0からスタート。正解すれば(=1が入力されれば)前のセルに1を足す。誤答すれば(=xが入力されれば)0に戻る。それ以外は前の行と同じ値を表示する。まだ出題されていない問題の行は-(ハイフン)を表示する」というようにします。

そこで、まず、N7:U7の範囲すべてに0を入力します。
そして、N8セルに以下の数式を入力し、N8:U57の範囲にオートフィルします。

=IF($B8=1,IF(D8=1,N7+1,IF(D8="x",0,N7)),"-")

※なお、オートフィルは、一度に縦方向か横方向のどちらかにしか行なえません。
「N8からU8にオートフィル→N8:U8からN57:U57にオートフィル」か、
「N8からN57にオートフィル→N8:N57からU8:U57にオートフィル」のどちらかの順でやることになります。

まず、「その行の問題が終了しているか?」を判定し、真ならばポイントを表示し、偽ならばハイフンを表示します。更に、ポイント表示も、「その人が正解した」「その人が誤答した」「その人は答えなかった」の3通りが考えられるため、IF関数で分岐していきます。

オートフィルしたら、試しに正解や誤答を入力してみましょう。
 このように正誤記録を入力すると…

このように得点の履歴が残ります。

問題が進んでいくごとにポイント記録テーブルが次々と数字のあるセルに書き換わり、正解すれば加算、誤答すれば0に戻ることを確認してください。

④ポイント記録テーブルを参照し、暫定ポイント数を表示する

ポイント記録テーブルのうち、一番最後に更新された行を参照し、現在のポイントとして表示します。
2通りありますので、両方とも説明します。

A. OFFSET関数を使用する方法

D6セルに以下の数式を入力し、K6セルまでオートフィルします。

=OFFSET(N$7,$P$4,0)

OFFSET関数は3つ~5つの引数からなり、セルの範囲を返します。
セルの範囲を指定する際、まず基準となるセルを決めます。次に、第2,3引数で、その基準セルから、行方向・列方向にどれだけずらすかを指定します。
第4,5引数を使うと、さらに行方向・列方向に指定範囲を拡張することもできます。
ここでは、まずポイント記録セルの7行目(初期状態の点数。いわば「0問目」)を基準セルとし、第2引数で、既に出題された問題数分、下にずらします。出題済み問題数はP4セルに表示されるのでしたね。これは解答者によらず参照する場所は不変なので、行列ともに絶対参照($P$4)です。


B. INDEX関数を使用する方法

D6セルに以下の数式を入力し、K6セルまでオートフィルします。

=INDEX(N$7:N$57,$P$4+1)

INDEX関数は、まず第1引数で指定されたセル範囲(このとき行か列の大きさが1でないといけない)の中から、(第2引数で指定された数)番目のセルを参照します。
まず、ポイント記録セルの7行目から57行目(きちんと「0問目の記録」も含めるのが重要)を第1引数に指定し、第2引数、すなわち何番目の要素を表示させるかは、やはり出題済み問題数にかかってるわけです。
このとき注意したいのは、出題済み問題数に1を足さなければならないということです。なぜなら、第1引数に指定したポイント記録セルは、0問出題時の記録が1番目、1問出題時が2番目、…となっているためです。

⑤ポイント表示欄の数式を書き換える

D4セルに以下の数式を入力し、K4セルまでオートフィルします。

=IF(D$6>=$N$4,"WIN",IF(COUNTIF(D8:D57,"x")>=$O$4,"LOSE",D$6))

今まで正解数を求める数式としてSUM関数を使っていましたが、それを6行目のセルを参照するだけに書き換えただけです。
これで、「(N4セルの数字)ポイント到達で勝ち抜け、(O4)回誤答で失格」というルールが実装されました。

最後に、6行目を非表示にするのを忘れずに!


オリジナルルールで行うなら、N4を10、O4を2と入力してやってみて下さい。


コメント

このブログの人気の投稿

基本①:「m○n×クイズ」の得点表示の作り方

参加者の苗字と名前を分離する/選手名を均等な大きさで表示する

勝ち抜け時に順位を表示する