スプレッドシートで並び替えや条件抽出を、コピー&ペーストではなく関数だけで自動化できるSORT関数とFILTER関数について解説します。草野球の成績管理表で打率ランキングを自動生成する場面を例に、初心者向けに丁寧に説明します。
SORT関数・FILTER関数とは
SORT関数は、指定した範囲をある列の値を基準に並び替えて返す関数です。FILTER関数は、指定した範囲の中から条件に一致する行だけを抜き出して返す関数です。どちらも元のデータ自体は書き換えず、別の場所に「結果だけ」を表示する点が共通しています。
基本の書式はこうです。
=SORT(範囲, 並び替える列の番号, 昇順にするか)
=FILTER(範囲, 条件範囲の条件式)
並び替える列の番号は、範囲の一番左を「1」として数えます。昇順にするかは、TRUE(昇順)かFALSE(降順)で指定します。
成績管理表での実例:打率ランキングの自動生成
大阪グーニーズの「選手成績一覧」シートには、選手ごとの通算成績が1行ずつまとまっているとします。A列に選手名、B列に打数、C列に安打、D列に打率が入っているとします。
| 選手名 | 打数 | 安打 | 打率 |
|---|---|---|---|
| SUZUKI | 42 | 15 | .357 |
| NAKATA | 3 | 2 | .667 |
| YAMAMOTO | 38 | 12 | .316 |
| … | … | … | … |
NAKATA選手は打率.667ですが、打数がわずか3しかありません。このまま打率だけで並び替えると、出場が少ない選手がランキング上位に来てしまい、実態と合わなくなります。そこで「打数10以上」の選手だけを対象にしてから、打率の高い順に並べたいとします。
=SORT(FILTER(A2:D30, B2:B30>=10), 4, FALSE)
この式をランキング表の先頭セルに1つ入力するだけで、条件を満たす選手が打率の高い順に自動で並んで表示されます。選手成績一覧が更新されるたびに、この1つの式が最新のランキングを返し続けてくれます。
他の表と重ならない、まとまった空白セル(例:別シートや離れた列)を選びます。この式は結果が複数セルに自動展開されるため、下方向・右方向に十分な空きが必要です。
まず「=FILTER(A2:D30, B2:B30>=10)」の部分を考えます。これで「打数10以上の行だけ」が抜き出された表になります。
「=SORT(」の中にSTEP2の式をそのまま入れ、続けて「, 4, FALSE)」を書き足します。「4」は抜き出された表の4列目(打率)、「FALSE」は降順(高い順)を意味します。
確定すると、入力したセルを起点に条件に合う行数分だけ結果が自動的に広がって表示されます(これを「スピル」と呼びます)。
しくみを理解する:SORTとFILTERは何をしているのか
「=SORT(FILTER(…), 4, FALSE)」のように関数を入れ子にすると、スプレッドシートは内側の関数から先に計算します。つまり、まずFILTERが元の範囲(A2:D30)から条件に合う行だけを抜き出した「新しい表」を作り、そのあとでSORTが、その「新しい表」を受け取って並び替えを行います。
- SORTに指定する列番号「4」は、元のA〜D列の番号ではなく、FILTERが抜き出したあとの表の中での列番号を指している
- SORT・FILTERはどちらも、範囲を書き換えるのではなく「計算結果の表」をその場に作り出して返している
- この結果は1つのセルに収まらないため、必要な行数・列数ぶんだけ自動的に隣接セルへあふれて表示される(スピル)
よくあるミス
今回の例で「打率はD列だから4」と覚えてしまうと、範囲や条件を変えたときに列番号がずれて事故のもとになります。SORTの列番号は、あくまでSORTに直接渡された表(この場合はFILTERの結果)の中での位置です。元のシートの列見出しと混同しないように注意してください。
スピルで結果が広がる予定のセルに、既に何かデータが入力されていると「#REF!」エラーになります。ランキング表は、他の表と離れた空白エリアに置くか、専用のシートを新しく用意しておくと安全です。
- SORT関数は「指定した列の値を基準に範囲を並び替える」関数
- FILTER関数は「条件に一致する行だけを抜き出す」関数
- 組み合わせるときは内側の関数から先に評価されるため、外側の列番号は「渡された結果の中での位置」を指すことを意識する
次回予告
次回のテーマは「配列関数のエラー対処法まとめ」です。SORTやFILTER、ARRAYFORMULAなど配列を返す関数を使うときによく出会う「#REF!」やサイズ不一致エラーの典型パターンと直し方を解説していきます。
▶︎ 次回:配列関数のエラー対処法まとめ



コメント