リーグ対戦表をExcelで作る!ポイントはADDRESS関数。対戦チームを増やす場合も対応可

広告

今回はリーグ対戦表をExcelで作る方法です。
こんな感じの表を作ります。↓
※実際に作成したファイルは下記ボタンよりダウンロードできます。

今回やること

アプリなどでも既にあると思われるのですが、Excelでも作れますのでその説明をしていきます。

このリーグ表を作る過程で使う関数にADDRESS関数があるのですがかなり便利です。
特定のセル位置の値を求めたいという場合に便利ですので覚えて損はありません。

この記事がおすすめな人は以下の方です。

  • Excelでリーグ戦用の表を作りたい
  • ちょっと人に自慢したい
yukimi
yukimi

難易度:3.0
途中混乱しそうな場所があります。
一つずつ整理しながら考えていくとわかりやすいです。

「リーグ戦表」と「判定表」の2つを作ります

まずは下図の様にそれぞれ「リーグ戦表」と「判定表」2つの表を作ります。

リーグ戦と判定表

リーグ戦表では今回、A・B・C・Dチームの4つのチームのリーグ戦を想定して作りました。

判定表には、○なら×を×なら○を、△なら△をそれぞれ表示するようにしています。

リーグ戦の表には2つ入力する場所があります。
リーグ戦の表を作っていく上で手間が発生するのと混乱しわかりづらくなる点があります。
今回は、赤い枠のエリアを入力すると青い枠のエリアの対象セルに自動で出力する表を今回作成します。

入力エリア

それでは次からは制作の工程に移ります。

リーグ戦表では行と列の位置関係がキーポイント

リーグ戦表を作成する上で、規則性を知っておく必要があります。
どのような規則かというと、例えばAチーム VS Bチームの試合結果のセル位置は、この表でいうとE4セルになります。
その反対は、D5になります。

位置関係がポイント

列がアルファベットのためわかりづらいのですが、E4を数値に直すと行4列5になります。
そして、D5は行5列4となります。

リーグ表対となるセルには行と列の数値が入れ替わった場所がもう一つのセルの位置となる

表を作る際は開始セルの行数と列数は合わせる!

※リーグ戦表を作成する時に、開始セルは行数と列数を合わせておかなければいけないので、その点は作成する時にご注意ください。
例えば下図の様に列数と行数があっていないと表の計算が上手く計算できなくなります。

開始セルの位置は行数・列数を合わせる

使用した式

=IFNA(INDEX($J$3:$K$5,MATCH(INDIRECT(ADDRESS(COLUMN(),ROW(),4)),$J$3:$J$5,0),2),””)

式は難しいように見えますが、やっている事はたった3つです。

  • 入力エリアの該当セル参照する
  • 入力エリアの該当セルが○だったら×、×だったら○、△だったら△とする
  • 入力エリアの該当セルが空欄だったら空欄にする

使用している関数は以下の通りになります。

  • IFNA(入力エリアの該当するセルが空欄の時は空欄にする)
  • INDEX(Match関数と合わせて、○だったら×、×だったら○、△だったら△とする)
  • MATCH
  • INDIRECT(Addressで求めたセル位置の値を求める)
  • ADDRESS(行数と列数を直接入力することでそのセルを求める)
  • CULUMN(列数を求める)
  • ROW(行数を求める)

入力エリアの該当セルを参照する

この場所が今回の一番のポイントになります。
式はこちらです。

INDIRECT(ADDRESS(COLUMN(),ROW(),4))

まずはD5セルの値を求めるためには、E4セルの値を引用する必要があります。

ここでADDRESS関数を使います。
ADDRESS関数は行番号,列番号,[参照の種類]…となっており、直接セルの位置を計算することができる関数です。
この関数を使って、B4セルを直接指定するのですが、計算式は行番号と列番号を固定値入力するのではなく自動で求められるようにします。(他のセルに式をコピーする度に固定値の更新が必要になってしまうため)

ADDRESS関数の式の特性を利し、行番号に列数、列番号に行数を入力します。

yukimi
yukimi

リーグ表対となるセルには行と列の数値が入れ替わった場所がもう一つのセルの位置となる規則性があるので、行と列を入れ替えます。

ADDRESS関数はセルをそのまま、結果として出力しますのでADDRESS関数で求めたセルの値を直接出力するのに、INDIRECT関数を使用します。

入力エリアの該当セルが○だったら×、×だったら○、△だったら△とする

INDEX($J$3:$K$5,MATCH(INDIRECT(ADDRESS(COLUMN(),ROW(),4)),$J$3:$J$5,0),2)

ここでやっていることは、判定です。
先ほど求めた入力エリアにあるセルの値と、判定表にある対戦相手にある値を返します。

今回の場合、勝ち(○)・負け(×)・引き分け(△)の3つのパターンがあります。
このようなケースの場合、IF文又はIFS分を使うと、式が長くなってしまいわかりづらくなってしまうためINDEX、MATCH関数を使用しています。

入力エリアの該当セルが空欄だったら空欄にする

空欄の場合、値がないため#N/Aというエラーが表示されます。

NAエラーの画像

NAエラーが表示されないように、最後にIFNA関数を使って、入力エリアが空欄の場合は空欄にする。といった処理を追加します。

=IFNA(INDEX($J$3:$K$5,MATCH(INDIRECT(ADDRESS(COLUMN(),ROW(),4)),$J$3:$J$5,0),2),””)

IFNA関数を追加後

あとがき

いかがでしたでしょうか。
今回お伝えした方法であれば、チーム数が増えても式をコピー&ペーストするだけで応用が可能になっています。

Excelなので、印刷も簡単ですので是非活用してみてください。

コメント