第67回 ランキングシートの設計思想:なぜ別シートにするのか

関数・自動化

前回は投手成績をグラフで可視化する方法を解説しました。ここからは第8章「ランキングシートを自動化する」に入ります。第67回はその第一歩として、なぜランキングを別シートに作るのかという設計思想から丁寧に解説します。

「年間(野手)シートに打率が並んでいるんだから、そこを見ればランキングもわかるんじゃないの?」——実はそのとおりで、データ自体はもうそろっています。でも、別シートにする理由がちゃんとあります。この回を読めば、シートを分ける理由が腑に落ちるはずです。

いまの状態と「ランキングシート」の違いを確認する

現在の年間(野手)シートには、全選手の打率・本塁打・打点などがすでに入っています。実際のデータで確認してみましょう。

選手名 打率 本塁打 打点 盗塁
TANAKA .368 0 3 7
NAKATA .286 0 4 1
SUZUKI .636 0 6 2
YAMAMOTO .357 0 4 7
SAKAI .227 1 3 2
YAMAOKA .222 1 5 0
(未出場選手が続く…) .000 0 0 0

このシートを眺めると「SUZUKIさんの打率が高い」「SAKAIさんとYAMAOKAさんに本塁打がある」くらいはわかります。でも「打率1位は誰で、2位は誰で、3位は誰か」を一瞬で答えられますか? 選手が20人以上並んでいると、目でスキャンするだけではなかなか難しいはずです。

そこがランキングシートの出番です。

ランキングシートが解決する3つの問題

📝 年間(野手)シートだけでは難しいこと
問題① 並び順が固定されていて「順位順」ではない

年間(野手)シートは背番号順や登録順に並んでいます。打率が高い順に並び替えると、背番号順の見やすさが崩れてしまいます。

問題② 試合のたびに手動で並び替えが必要になる

フォームにデータが追加されるたびに、年間(野手)シートを「打率で降順」に手動で並び替えていると、次に背番号順で見たいときにまた並び替えが必要です。2つの並び順を1枚のシートで共存させることはできません。

問題③ 複数部門のランキングを同時に見せられない

打率ランキングを見せながら、同じ画面で本塁打ランキングや打点ランキングも並べて表示したい——年間(野手)シートの構造ではこれが難しく、専用のレイアウトが必要になります。

この3つの問題をまとめて解決するのが、役割に特化した「ランキングシート」を別に作るという発想です。

3層構造のおさらい:ランキングシートはどこにあるか

第9回で説明した「3層構造」を思い出してください。この連載の成績管理表は、大きく3つの層に分かれています。

✅ 3層構造のおさらい
第1層:入力層(フォームシート)

フォーム(野手)・フォーム(投手)・フォーム(チーム成績)
→ 試合ごとの生データが蓄積される

第2層:集計層(年間シート)

年間(野手)・年間(投手)・チーム
→ 第1層を関数で集計して選手別・チーム別の成績をまとめる

第3層:表示層(ランキングシート)← いまここ

ランキング
→ 第2層のデータを「見せるために整える」。順位を自動計算して見やすく並べる

ランキングシートは自分ではデータを持たないのが重要なポイントです。年間(野手)シートの数値を参照して、並び替えた形で表示するだけです。

「ランキングシートは自分でデータを持たない」——この一文がすべての設計思想を表しています。データは年間(野手)シートに一元管理し、ランキングシートはそれを読みに行くだけ。だからフォームに新しい試合結果が追加されると、ランキングシートも自動的に更新されます。手作業でランキングを書き直す必要がありません。

ランキングシートの完成レイアウト

実際のランキングシートがどんな構成になっているか確認しましょう。打率・本塁打・打点の3部門を横に並べたレイアウトです。

✅ ランキングシートの実データ(現在の成績)
【打率】規定打席以上
順位 選手名 打率
1SUZUKI.636
2TANAKA.368
3助っ人.368
4YAMAMOTO.357
5Y.MIYAI.318
【本塁打】
順位 選手名 本塁打
1SAKAI1
2YAMAOKA1
3助っ人1
4(0本が続く)0
【打点】
順位 選手名 打点
1SUZUKI6
2YAMAOKA5
3助っ人5
4NAKATA4
5Y.MIYAI4

1枚のシートに3部門が横並びになっています。これが「表示に特化したレイアウト」の強みです。年間(野手)シートの縦並びのまま複数部門を表示しようとすると、こういう配置は作れません。

ランキングシートを作るのに使う関数の予告

ランキングシートの核になる関数は LARGEINDEXMATCH の3つです。次回以降で1つずつ丁寧に解説しますが、ここでは「何をする関数か」だけ先に押さえておきましょう。

📝 ランキングシートで使う3つの関数の役割
関数 一言でいうと ランキングでの使い方
LARGE 「〇番目に大きい数値」を取り出す 打率の1位・2位・3位の値を自動取得する
INDEX 「〇行目・〇列目のセル」の値を返す MATCH で見つけた行番号の選手名を取り出す
MATCH 「この値はリストの何行目か」を調べる 1位の打率の値が年間(野手)シートの何行目にあるか探す

流れを一言でまとめると——「LARGE で順位の値を特定 → MATCH でその値が何行目にあるか探す → INDEX でその行の選手名を取り出す」です。この組み合わせが自動ランキングの仕組みです。

ランキングシートを作る前に済ませておくこと

関数の話に入る前に、シートの準備として確認しておきたいことが2つあります。

準備① ランキングシートを新規作成する

スプレッドシートの下部にある「+」ボタンをクリックして新しいシートを追加し、シート名を「ランキング」にします。すでにシートが存在する場合はそのまま使います。

準備② 部門ごとのブロックを横に並べるレイアウトを決める

「打率」ブロックをA〜C列、「本塁打」ブロックをE〜G列(1列空けて)、「打点」ブロックをI〜K列——というように、部門ごとの位置を先に決めておくとあとで迷いません。列を1つ空けるだけで、各ブロックが視覚的に区切られて見やすくなります。

準備③ 各ブロックの1行目にヘッダーを入力する

A1に「【打率】規定打席以上」、A2に「順位」、B2に「選手名」、C2に「打率」——という形でヘッダーを入力します。見出しを先に書いておくと、関数を入れる位置が把握しやすくなります。

⚠️ ランキングシートには直接数値を入力しない

ランキングシートのセルに「SUZUKI」「.636」などを手入力したくなるかもしれませんが、それでは次の試合後に手動で書き換えが必要になります。すべての値は関数で年間(野手)シートから自動取得するのがこの設計の肝です。ヘッダーと順位番号(1・2・3…)だけが手入力で、成績値・選手名はすべて関数で埋めます。

✅ この記事のまとめ
  • 年間(野手)シートはデータを背番号順に管理する集計層。ランキングシートはそれを順位順に表示するための表示層——役割が違うから別シートに分ける
  • ランキングシートは自分でデータを持たない。年間(野手)シートを参照するだけなので、フォームに入力するたびに自動更新される
  • 「並び順の競合」「手動並び替えの手間」「複数部門の同時表示」という3つの問題を別シート化で一気に解決できる
  • ランキングシートの核は LARGE・INDEX・MATCH の3関数の組み合わせ——次回から1つずつ解説する
  • シート作成前に「部門ごとのブロック配置」を決めておくと迷わない。ランキングシートへの直接入力は厳禁

次回予告

次回は「LARGE関数で上位N件を自動取得する」。打率・打点など各部門の1位・2位・3位の値をLARGE関数で自動的に取り出す仕組みを、実際の式を組み立てながら解説します。

▶︎ 次回:【第68回】LARGE関数で上位N件を自動取得する

コメント

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