「売上データを金額順に並べ替えたいけど、基準の列が離れた場所にある」「別シートの評価データを使って並べ替えたい」。こんな場面、仕事でよくありますよね。
SORT関数でも並べ替えはできますが、基準を「列番号」で指定するため、列が追加・削除されると数式が壊れてしまいます。基準列が表の外にある場合は、そもそも対応できません。
そんなときに便利なのが SORTBY関数 です。基準を「範囲」で直接指定するので、列の位置が変わっても壊れにくく、別シートの列も基準に使えます。
この記事では、SORTBY関数の基本から実務活用パターン、SORT関数との違いまで紹介します。
SORTBY関数とは?(スプレッドシート独自の関数)
SORTBY(ソートバイ)は、別の列や範囲を基準にしてデータを並べ替える 関数です。「Sort」は並べ替え、「By」は「〜を基準に」という意味です。
SORT関数が基準を「何列目か」と番号で指定するのに対し、SORTBY関数は「この範囲の値」で直接指定します。列の挿入や削除があっても数式が壊れにくく、さらに表の外にある列も基準にできるのが大きな特徴です。
NOTE
SORTBY関数はGoogleスプレッドシート独自の関数です。Excelにも同名のSORTBY関数がありますが、引数の仕様が異なります。
構文
=SORTBY(範囲, 並べ替え基準範囲1, 順序1, [並べ替え基準範囲2, 順序2, ...])
引数の意味
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 範囲 | 必須 | 並べ替えたいデータ範囲(例: A2:D100) |
| 並べ替え基準範囲1 | 必須 | 基準にする列の範囲(例: D2:D100) |
| 順序1 | 任意 | 1 = 昇順 / -1 = 降順。省略すると昇順 |
| 並べ替え基準範囲2, 順序2 | 任意 | 2つ目以降の並べ替え基準。ペアで繰り返し追加できる |
TIP
SORT関数の順序指定は TRUE/FALSE ですが、SORTBY関数は 1(昇順)/ -1(降順) です。間違えやすいポイントなので覚えておいてください。
SORTBY関数の基本的な使い方
この記事では、次の売上データを使って説明します。
| A列(担当者) | B列(支店) | C列(商品) | D列(金額) | |
|---|---|---|---|---|
| 2行目 | 田中 | 東京 | ノートPC | 150000 |
| 3行目 | 佐藤 | 大阪 | モニター | 45000 |
| 4行目 | 鈴木 | 東京 | キーボード | 8000 |
| 5行目 | 高橋 | 名古屋 | ノートPC | 140000 |
| 6行目 | 伊藤 | 大阪 | マウス | 3000 |
| 7行目 | 山本 | 東京 | モニター | 45000 |
| 8行目 | 中村 | 名古屋 | ノートPC | 150000 |
金額の大きい順に並べ替える
金額が大きい順にデータを並べ替えてみましょう。空いているセル(たとえばF2)に次の数式を入力します。
=SORTBY(A2:D8, D2:D8, -1)
各引数の意味は次のとおりです。
- A2:D8 … 並べ替えたいデータ範囲
- D2:D8 … 基準にする列の範囲(金額列)
- -1 … 降順(大きい順)
結果は次のとおりです。
| F列 | G列 | H列 | I列 |
|---|---|---|---|
| 田中 | 東京 | ノートPC | 150000 |
| 中村 | 名古屋 | ノートPC | 150000 |
| 高橋 | 名古屋 | ノートPC | 140000 |
| 佐藤 | 大阪 | モニター | 45000 |
| 山本 | 東京 | モニター | 45000 |
| 鈴木 | 東京 | キーボード | 8000 |
| 伊藤 | 大阪 | マウス | 3000 |
金額の大きい順に全件が並べ替えられました。SORT関数で同じ結果を得るには =SORT(A2:D8, 4, FALSE) と書きますが、SORTBY関数は「D2:D8」と範囲で直接指定するので、列の位置が変わっても安心です。
複数条件で並べ替える
SORTBY関数は、基準と順序のペアを追加するだけで複数条件の並べ替えができます。
「支店の昇順 → 同じ支店内は金額の降順」で並べ替えるには、次のように書きます。
=SORTBY(A2:D8, B2:B8, 1, D2:D8, -1)
- B2:B8, 1 … 支店列を昇順(第1基準)
- D2:D8, -1 … 金額列を降順(第2基準)
結果は次のとおりです。
| F列 | G列 | H列 | I列 |
|---|---|---|---|
| 佐藤 | 大阪 | モニター | 45000 |
| 伊藤 | 大阪 | マウス | 3000 |
| 中村 | 名古屋 | ノートPC | 150000 |
| 高橋 | 名古屋 | ノートPC | 140000 |
| 田中 | 東京 | ノートPC | 150000 |
| 山本 | 東京 | モニター | 45000 |
| 鈴木 | 東京 | キーボード | 8000 |
まず支店名の昇順(あいうえお順)で並び、同じ支店のなかでは金額の大きい順になっています。
SORT関数との違い・使い分け
SORT関数とSORTBY関数はどちらも並べ替えの関数ですが、仕組みが異なります。
| 比較項目 | SORT関数 | SORTBY関数 |
|---|---|---|
| 基準の指定方法 | 列番号(1, 2, 3…) | 列の範囲(D2:D100) |
| 順序の指定方法 | TRUE / FALSE | 1 / -1 |
| 列の追加・削除に強いか | 列番号がずれる可能性あり | 範囲指定なのでずれにくい |
| 表の外の列を基準にできるか | できない | できる |
| 別シートの列を基準にできるか | できない | できる |
| 数式の見やすさ | 短くてシンプル | 基準列が明示的でわかりやすい |
SORT関数は手軽に書ける一方、列の挿入・削除に弱い面があります。SORTBY関数は範囲で直接指定するのでメンテナンスに強く、さらに表の外や別シートにある列も基準にできます。
迷ったらSORTBY関数を使っておけば安心です。 列構成の変更に強いので、長く使う数式ほどSORTBY関数が向いています。
NOTE
3つの並べ替え関数(SORT・SORTN・SORTBY)の全体像は SORT・SORTN・SORTBY関数の比較記事 で紹介しています。上位N件だけ取り出したい場合は SORTN関数の記事 もあわせてご覧ください。
実務でよく使うSORTBY活用パターン
別シートのデータで並べ替える
SORTBY関数の最大の強みは、基準列がデータ範囲の外にあっても使える 点です。
たとえば「社員一覧」シートのA2:C10に社員データがあり、「評価」シートのB2:B10に評価点が入っているとします。評価点の高い順に社員を並べ替えるには、次のように書きます。
=SORTBY('社員一覧'!A2:C10, '評価'!B2:B10, -1)
SORT関数では「列番号」しか指定できないため、表の外にある列は基準にできません。SORTBY関数なら別シートの列でも自由に基準として使えます。
FILTER+SORTBYで条件付き並べ替え
FILTER関数と組み合わせると、条件で絞り込んだデータを並べ替えられます。
「東京支店のデータだけを金額順に表示する」場合は、次のように書きます。
=SORTBY(FILTER(A2:D8, B2:B8="東京"), FILTER(D2:D8, B2:B8="東京"), -1)
ポイントは、基準範囲にも同じFILTER条件を適用することです。SORTBY関数は「範囲」と「基準範囲」の行数が一致している必要があります。FILTER後のデータに対して基準もFILTERで絞り込めば、行数がそろいます。
TIP
SORT関数なら
=SORT(FILTER(A2:D8, B2:B8="東京"), 4, FALSE)と短く書けます。FILTER結果の中の列番号で基準を指定できるからです。この場面では使いやすいほうを選んでOKです。
計算結果を基準にして並べ替える
SORTBY関数の基準範囲には、数式の計算結果も使えます。
たとえば「文字数の少ない順に商品名を並べ替えたい」場合は、次のように書きます。
=SORTBY(C2:C8, LEN(C2:C8), 1)
LEN関数で各商品名の文字数を計算し、その結果を基準にして昇順で並べ替えています。このように、シート上に基準列を作らなくても数式の結果で並べ替えられるのがSORTBY関数の柔軟なところです。
SORTBY+INDEXで特定列だけ取り出す
並べ替えた結果から特定の列だけを取り出したい場合は、INDEX関数と組み合わせます。
「金額順に並べ替えた結果から担当者名だけを取り出す」例です。
=INDEX(SORTBY(A2:D8, D2:D8, -1), , 1)
SORTBY関数で金額の降順に並べ替えた結果の1列目(担当者名)だけを返します。ランキング表で「名前だけのリスト」を作りたいときに便利です。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #REF! | 結果の展開先にデータがある | スピル先のセルを空にする |
| #VALUE! | 順序に1・-1以外の値を指定した | 1(昇順)または-1(降順)を指定する |
| #VALUE! | 範囲と基準範囲の行数が異なる | 行数を揃える(基準範囲は1列で、範囲と同じ行数にする) |
| #VALUE! | 基準範囲が複数列になっている | 基準範囲は1列(または1行)のみ指定する |
| #N/A | 範囲が空(データなし) | IFERROR関数でエラー時のメッセージを設定する |
| TRUE/FALSEを指定してエラー | SORT関数の書き方と混同 | SORTBYの順序は1/-1。TRUE/FALSEではない |
特に多いのが 順序指定の間違い です。SORT関数は TRUE(昇順)/ FALSE(降順)ですが、SORTBY関数は 1(昇順)/ -1(降順)です。混同しやすいので注意してください。
エラーを非表示にしたい場合は、IFERROR関数で囲みます。
=IFERROR(SORTBY(A2:D8, D2:D8, -1), "データがありません")
まとめ
この記事では、スプレッドシートのSORTBY関数の使い方を解説しました。
- SORTBY関数は 基準列を範囲で直接指定 して並べ替える関数
- SORT関数との最大の違いは「表の外の列」や「別シートの列」も基準にできる点
- 順序指定は 1(昇順)/ -1(降順)。SORT関数のTRUE/FALSEとは異なるので注意
- 基準と順序のペアを追加すれば、複数条件の並べ替えもかんたん
- FILTER関数やLEN関数など、他の関数と組み合わせて柔軟な並べ替えが可能
並べ替え関数の全体像は SORT・SORTN・SORTBY関数の比較記事 で確認できます。上位N件だけ取り出したいときは SORTN関数 もチェックしてみてください。
