【参加者管理⑧】敗者復活~準決勝

前回:【参加者管理⑦】3R勝者集計まで

3Rまで終了し、勝者が12名決まりました。
続いて敗者復活戦により1名を合流させ、13人でアタック風サバイバルを行います。

なお、ここで想定している大会の敗者復活では、得点表示は行いません。
得点表示を行わなくても進行できる形式としては、以下のようなものが挙げられます。

A.サバイバルクイズ

参加者全員にあらかじめ選択肢札もしくは解答用紙を配り、全員を起立させてスタート。
問題を1問出題し、制限時間内に手持ちの解答用紙に答えを書きます(択一形式なら手持ちの札を掲げる)。
誤答が出た時点でその人は失格となり、着席します。
規定人数以下になったら終了。
多くの場合はその後、2ndステップと称し早押しクイズに移行する。

B.2○1×

「1問正解で起立、2問正解で勝ち抜け、1問誤答で即失格」という早押し形式ならば、小道具を使わなくても進行することが可能です。
3○以上のノルマを課したい場合は、首からかけるレイなどを用意する必要があります。その際、レイをかけるスタッフも舞台上に1~2人用意しておくとよいでしょう。


今回までの完成品はこちらです。

【作り方】

①準決勝の参加者テーブル・勝者テーブルを作る

「参加者管理」シートを開いてください。
まず、左の参加者管理テーブルの準決勝の行に、3Rと同様「順番」行を挿入します。M列が「順番」行になりました。
(無計画ですみません…)

続いて数式です。
M3セルに以下の数式を入力し、M62セルまでオートフィルします。

=IF(COUNTIF($AE$10:$AG$13,A3)>0,RANK.EQ(A3,$AE$10:$AG$13,1),"")

まず、3Rの勝者テーブル(AE10:AG13)の中に、その人がいるかどうかを探します。もしあった場合は、その人が勝者の中で何番目かを返します。このとき、第3引数に「1」を指定しておくのを忘れないでください。ペーパー順位なのですから、「数字が小さい方が上位」というわけです。


続いて、準決勝の参加者テーブルです。
作り方は【参加者管理⑥】のステップ④を参考にしましょう。



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

=SUMPRODUCT(($M$3:$M$62=R$3)*($A$3:$A$62))


②準決勝の得点表示を作る

準決勝の得点表示シートを開いてください。


まず、13人でプレイするので、13枠に増やす必要がありますね。
L列(スルー入力セル)を選択し、「挿入」ボタンを5回押してください。
そして、行の幅や得点フォントの大きさを微調整してください。
(今回のルールは誤答数は順位の判定に用いないので、誤答数表示セルはまるごと消してしまってもいいです)

なお、この形式では、誤答表示セルの下に1つ非表示となっている行があります。
ここはあとで別の方法で表示させるので、現段階では無理にオートフィルする必要はありません。

次に、ペーパー順位と参加者名を入力します。もうこの手順は3回目なので割愛します。
順位表示部は、参加者名表示セルの上に2行挿入するのでしたね。



③復活者の表示を行う

さて、次に13枠目の敗者復活者の表示です。
敗者復活は、ペーパークイズ敗退者にも勝ち上がる可能性があります。そのため、参加者管理テーブルに載っていないプレイヤーも勝ち上がる可能性があるわけです。
「ペーパー成績」シートには全参加者が載っており、各参加者にはエントリー番号が付与されていますから、その番号を使って名前を載せることもできなくはないです。
しかし、ほとんど使われる機会のないエントリー番号をいちいちチェックするのに手間がかかり、大会の進行を長く止めてしまうことも考えられます。

ここでは、いっそのこと、ペーパー順位やエントリー番号などの数値で管理することを忘れ、敗者復活者の名前を直接打ち込む方式をとってみます。

参加者管理シートに戻り、参加者管理テーブルの一番下に、「99位」の枠を作ります(99でなくとも、60より大きい数字ならなんでもいいのですが…)。


敗者復活が終わったら、C63セルに復活者の名前を直接入力します。

得点表示シートに戻りましょう。
2行目には「99」、
3行目の順位表示セルには数式ではなく「復活」、
参加者名表示セルは直接「=参加者管理!$C$63」と入力しておきます。
(隣の列からオートフィルしても無理。参照しているのが3~62行目だけなので)


④ライフ記録テーブルを作る

続いて、シート右側に作る各種記録テーブルです。

まずライフ記録テーブルは、13列×51行(S8:AE58)の領域を使います。



最初の1行(0問目の行)は全てS5セルの「初期値」に設定した値を返します。すなわち、S8からAE5セルには

=$S$5

と入力します。

続いて、2行目以降です。
S9セルに以下の数式を入力し、AE58セルまでオートフィルします。

=IF(COUNTIF($D9:$P9,1)>0,IF(D9=1,S8+$U$5,S8-$T$5),IF(D9="x",S8-$V$5,S8))

まず、「正解者が発生したかどうか」をチェックします。それがTRUEなら、次は「その人が正解したか」をチェックします。TRUEならその人にはU5セルの「正解時の自分の得点」に設定した値が加算されます(今回は0に設定してあるので、加算されません)。FALSEならば、T5セルの「正解時の相手の減点」に設定した値が減算されます。
正解者が発生しなかった場合は、まず「その人が誤答したか」をチェックします。TRUEならば、V5セルの「誤答時の自分の減点」に設定した値が減算されます。今回は3に設定しております。FALSE(自分以外が誤答orスルー)ならば、得点は変わりません。

ここで、非表示になっていた7行目のセルを書き換えます。
D7セルに以下の数式を入力し、P7セルまでオートフィルします。

=OFFSET(S8,$Y$5,0)

ライフ記録テーブルをOFFSETでたどっていくだけですね。
Y5は「出題数」が表示されているセルです。0問目の行である8行目から出題数だけ下にシフトした場所を参照します。

⑤残り人数記録テーブル・プレーオフ発生時記録テーブルを作る

さて、今回はこれまでとは違いサバイバル方式です。すなわち進行につれて次々と勝者が決まっていく方式ではなく、次々と敗者が決まっていき、最終的に残った人たちが勝者となる方式です。それで、ある問題が終了した際、残りプレイヤー数が決勝進出枠である4人未満になり、プレーオフに突入する可能性もあるわけです。
そこで、各問題ごとに残りプレイヤー数をチェックするテーブルを作ります。

それでは、AG列を「残り人数記録テーブル」として作っていきます。
AG8セルに以下の数式を入力し、AG58セルまでオートフィルします。

=SUMPRODUCT(($S$7:$AE$7="")*($S8:$AE8>0))

S7からAE7までは全て空白のセルです。この配列と、「S8:AE8(1問目の各プレイヤーの得点)のセルのうち0以上のもの」を掛け合わせることで、残りプレイヤーが何人いるかを求めることが出来ます。


次に、ある問題から次の問題にかけて残り人数が4人未満になった瞬間を記録するための「プレーオフ発生時記録テーブル」をAH列に作ります。

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

=IF(AG9=4,"finish",IF(AND(AG8>4,AG9<4),"playoff",""))

残り人数がちょうど4人になった場合は試合終了ということで「finish」、残り人数が1問前では4人を超えており、かつその次では4人未満となっている場合は、「playoff」と表示されます。


⑥プレーオフ発生時に、ライフが0になったプレイヤーがすぐにLOSEと表示されないようにする

さて、さきほどの図のように、6人から2人になった場合、その2人は勝ち抜け確定ですが、それ以外の4人はプレーオフの対象となります。
そのプレイヤーがプレーオフの対象であることを得点表示セルに表示しなくてはなりません。

ここでは、プレーオフ参加の場合は「LOSE」の代わりに「0」と表示させる方法を取ります。

そこで、まず得点表示セルの数式を書き換えます。
D5セルを以下のように書き換え、P5セルまでオートフィルします。

=IF(OFFSET(S$8,$Y$5,0)>0,OFFSET(S$8,$Y$5,0),IF(OFFSET(S$8,$Y$5,0)<0,"LOSE",IF(COUNTIF($AH$8:$AH$58,"playoff")>=1,0,"LOSE")))

得点表示セルに表示させるものをケース別に分類した表を以下に示します。
「ライフが1以上残っている場合」と、「(もし失格後も他者の正解によりライフが減り続けると仮定した場合に)ライフが0未満」の場合は、通常時もプレーオフ発生時も変わりません。よって、まず最初に「ライフが1以上の場合」と「ライフが0未満の場合」を処理します。
そのどちらでもない、すなわち「ライフがちょうど0」である場合は、プレーオフが発生しているかどうかで分岐します。プレーオフが発生している場合はライフの値そのままの「0」、発生していない場合は「LOSE」を表示させます。

これで、プレイヤー人数が決勝進出枠以下になった場合は即座にLOSEと表示されないようになりました。

この状態から「参加者04」が正解すると…

3人が失格。次に「参加者59」が正解すると…

3人が0pになりますが、この時点で残っているのは2人。
この2人は勝ち抜け。
0pになった3人はプレーオフとなります。

⑦勝者記録テーブルを作る

今回はサバイバル方式ということで、プレーオフ以降を除き、先着順に勝者が決まるわけではありません。
なので、別の方法を考えます。

まず、プレーオフ発生時記録テーブルの横に、13列×54行(50問分+全問題終了時の判定用)のテーブルを作ります。
ここではAI9からAU62までを使います。



続いては数式です。
AI9に以下の数式を入力し、AU62までオートフィルします。

=IF(OR(D9="W",AND($AH9<>"",S9>0)),"WIN","")

プレイヤーが勝利するのは、正誤入力セルに"W"が入力されたか、「試合終了」かつ「ライフが0より大きい」の場合のいずれかです。
これまで同様、手動勝ち抜け処理は「Wを入力する」です。


playoffの文字が表示された時点で、ライフが0より大きかった2人には、WINの文字が表示されるわけです。

次に、勝者記録テーブルの1つ上の行である8行目に、それぞれのプレイヤーが勝ったかどうかを表示させます。

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

=IF(COUNTIF(AI$39:AI$62,"WIN"),"WIN","")

さて、COUNTIF関数に「>0」という演算部分を記述しませんでしたが、これでもきちんと機能します。演算部を省略した場合は、返ってくる値が0のときにFALSE、それ以外はTRUEとしてあつかわれるのです。



⑧勝ち抜け時の書式の設定を行う

得点表示セルの書式設定を行います。
D5:P5セルを選択し、「条件付き書式」→「ルールの管理」を選択してください。


現時点では、勝ち抜け表示になる条件は「得点表示セルに"WIN"と表示された場合のみ」と設定されています。

「ルールの編集」を押し、数式を以下の通りにしてください。

=AI$8

先程作った勝ち抜けチェッカーを利用します。



ここでは、この4人が勝ち抜けたとします。

⑨準決勝の勝者を管理シートに記録する

参加者管理シートに戻ります。

まずは「通過」の列(N列)。
N3セルに以下の数式を入力し、N63までオートフィルします。

=IF($M3<>"",IF(INDEX(SF!$AI$8:$AU$8,$M3)="WIN","o",""),"")

まず最初に、M列に数字があるかどうか(=準決勝に参加しているか)をチェックします。そうでない場合は何も表示しません。
次に、SFシートの勝者チェッカー(AI8:AU8)を参照し、そのプレイヤーの場所に"WIN"が表示されているかどうかをチェックします。もしそうなら"o"と表示されます。

次に、その隣の列(O列)に、勝者の中での番号を振っていきます。
O3セルに以下の数式を入力し、O63セルまでオートフィルします。

=IF(N3="o",COUNTIF($N$3:$N3,"o"),"")



このように、各勝者にはきちんとマークがついていることが確認できます。

続いて、右側の勝者記録テーブルに移ります。
AE15セルに以下の数式を入力し、AH15セルまでオートフィルします。

=INDEX($A$3:$A$63,MATCH(AE$3,$O$3:$O$63,0))


4人の決勝進出者がここに刻まれました。

次回はいよいよ決勝戦のシートを作っていきます。

(次回に続く)

コメント

このブログの人気の投稿

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

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

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