「Head of the Stage」の得点表示の作り方

2022/07/24追記:プログラムにバグがあったため、作り方の修正および完成品ファイルの差し替えを実施しました。作り方の修正箇所は赤字で示しています。

前回は、上座クイズの基本である解答者の上下の処理のみを行える段階まで作りました。
ここから、さらにルールを付け加えていきます。

今回は、かつてSTUの準決勝で行われていた「Head of the Stage」の得点表示の作り方を解説します。

このクイズは9人で行います。まず、客席から見て左側(下手)から前Rの成績順に並びます。
左に行くほど「上位の席」となっており、早押しクイズで正解すると2つ上位の席に上がることができます。
また、このクイズではポイントを稼ぐ必要があり、1位席で正解すると+4p、2位席で正解すると+2p、3位席で正解すると+1pとなります。それ以外の席で正解してもポイントは増えないため、勝ち抜けるためにはまず上位席に登らなければなりません。
10p以上に到達すれば勝ち抜けとなります。

ただし、誤答はいかなる位置でも即座に最下位の席に落とされてしまいます。また、誤答数はカウントされており、通算5×で失格となります。
(最下位席で誤答した場合は2×が加算)

それでは、「上座クイズ」の得点表示の作り方(基本形)の続きから作っていきます。
完成品はこちらです。

【作り方】

①ルール設定をする

デフォルト設定は以下の通りです。

勝ち抜け:10
失格:5
上昇:2
下降:8

「下降」は(プレイヤー数-1)以上の数ならば、誤答時に最下位席降格と同じことになります。

②勝ち抜け者数記録テーブル・失格者数記録テーブル・ポイント数記録テーブル・×数記録テーブルを作る

上座クイズの得点表示では既に3つのテーブルを作りましたが、ここではさらに4つのテーブルを増設します。
また、プレイヤーの人数も9人に増やす必要があります。

[既設]解答者配置テーブル(O~W列)
[新設]勝ち抜け者数記録テーブル(X列)
[新設]失格者数記録テーブル(Y列)
[既設]順位加減テーブル(Z~AH列)
[既設]順位更新テーブル(AJ~AR列)
[新設]ポイント数記録テーブル(AT~BB列)
[新設]×数記録テーブル(BD~BL列)

最後の2つのテーブルにおいて、各行は各解答者に対応しています。
すなわち、AT列とBD列は番号1の解答者の記録、AU列とBE列は番号2の解答者の記録、…、BB列とBL列は番号9の解答者の記録というわけです。


とりあえずまずは格子を引きます。
今回は0問目の行である6行目から格子を作って下さい。

続いて、加算ポイント数と加算×数の表を作ります。
どこでもいいのですが、4,2,1,0,0,0,0,0,0という配列と1,1,1,1,1,1,1,1,2という配列を入力しておいてください。
これは、それぞれ「各席における正解時の加算ポイント」および「各席における誤答時の加算×」を表しています。
ここでは、AT4~BB4に加算ポイント表を、BD4~BL4に加算×表を書きます。

いよいよ、数式を入力します。
新設した4つのテーブルの数式を入力するだけではなく、順位加減テーブルの数式の修正も必要です。

<勝ち抜け者数記録テーブル>

X6セルには0を入力します。
X7セルに以下の数式を入力し、X56セルまでオートフィルします。

=SUMPRODUCT(($AT6:$BB6>=$O$4)*($AT$6:$BB$6<>""))

<失格者数記録テーブル>

Y6セルには0を入力します。
Y7セルに以下の数式を入力し、Y56セルまでオートフィルします。

=SUMPRODUCT(($BD6:$BL6>=$P$4)*($AT$6:$BB$6<>""))

<順位加減テーブル>

Z7セルを以下のように書き換え、AH56セルまでオートフィルします。

=Z$5-IF(D7=1,$S$4+0.1,IF(D7="x",-$T$4-0.1,0))-IF($X7>=Z$5,$S$4+0.1,0)+IF(9-$Y7<Z$5,$T$4+0.1,0)

このように書き換えることで、勝ち抜け者が発生した後、「上位陣が正解したときに勝ち抜け者を押しのけて上位に潜り込む」ということや「誤答者が出た場合、失格者を押しのけて最下位席に落ちる」ということを防ぐことができます。
そのために、勝ち抜け者数記録テーブルと失格者数記録テーブルを作ったのです。

<ポイント数記録テーブル>

AT6~BB6セルには全て0を入力します。
AT7セルに以下の数式を入力し、BB56セルまでオートフィルします。

=IF(INDEX($D7:$L7,MATCH(Z$5,$O7:$W7,0))=1,AT6+INDEX($AT$4:$BB$4,MATCH(Z$5,$O7:$W7,0)-$X7),AT6)

<×数記録テーブル>

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

=IF(INDEX($D7:$L7,MATCH(Z$5,$O7:$W7,0))="x",BD6+INDEX($BD$4:$BL$4,MATCH(Z$5,$O7:$W7,0)+$Y7),BD6)


各テーブルの関係図は以下の通りです。




③解答者表示セルの上に解答者番号を表示させる

解答者配置テーブルの番号を参照し、解答者番号を表示させます。
これをすることで、続く手順④の手間を少しだけ省くことができます。

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

=OFFSET(O$7,$Q$4,0)



こうすることで、D3セルを以下のように書き換えることもできます。
(書き換えなくてもよいですが)

=INDEX($Z$3:$AH$3,OFFSET(O$7,$Q$4,0))

=INDEX($Z$3:$AH$3,D$2)

この部分を見せたくない場合は、見出しを右クリックして「非表示」を選択して隠すか、文字の色を白に設定するなどしてください。

④得点表示セル・×数表示セルを作る

<得点表示セル>

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

=IF(INDEX(OFFSET($AT$6:$BB$6,$Q$4,0),D$2)>=$O$4,"WIN",IF(INDEX(OFFSET($BD$6:$BL$6,$Q$4,0),D$2)>=$P$4,"LOSE",INDEX(OFFSET($AT$6:$BB$6,$Q$4,0),D$2)))

勝ち抜け時には「WIN」、失格時には「LOSE」と表示されるようになっております。

<×数表示セル>

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

=INDEX(OFFSET($BD$6:$BL$6,$Q$4,0),D$2)&"×"







コメント

  1. ご指摘ありがとうございます。
    ほぼ間違いなくバグでございます。長期間放置してしまい申し訳ございません。
    なるべく早く対処致しますので、今しばらくお待ち下さい。

    返信削除
  2. このコメントは投稿者によって削除されました。

    返信削除
  3. お待たせ致しました。先程修正しましたので、ご確認ください。
    原因は、「勝ち抜け者数記録テーブル」と「失格者数記録テーブル」が参照すべきタイミングが1問ずれていた点であり、これにより、「勝抜け/失格発生直後の1問に限り、席移動数・ポイント・×増加量が勝抜け/失格発生前のものを採用してしまうという」という現象が発生しておりました。
    対処として、「勝ち抜け者数記録テーブル」「失格者数記録テーブル」の参照先行を修正し、それに併せて「ポイント数記録テーブル」「×数記録テーブル」を修正しました。
    Excelファイルも差し替え済みですので、ダウンロードして挙動に問題がないかご確認ください。
    よろしくお願いします。

    返信削除
  4. 初めまして、現在このサイトを参考に得点表示を作っている者です。現在15人用に作成しているのですが上手くいきません。 よろしければ、15人用のをデモで付くっていただけませんでしょうか?

    返信削除

コメントを投稿

このブログの人気の投稿

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

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

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