「売上データを金額順に並べ替えたいけど、基準の列が表の外にある」「別シートにある評価点を基準に社員リストを並べたい」。こういう依頼、急に飛んでくると地味に困りますよね。普通のSORT関数だと、列番号がずれた瞬間に数式が壊れます。表の外の列は基準にできず、別シートにも対応できません。
そこで頼りになるのが SORTBY関数 です。基準列を「範囲」で直接指定するので、列が増減しても壊れにくく、表の外や別シートのデータも基準にできます。ピボットテーブルほど大げさな仕組みを作らなくても、関数1本でランキング表や条件付き並べ替えがサッと書けるのが強みです。
この記事では、SORTBY関数の基本構文から、複数条件の並べ替え、SORT関数との違い、FILTERや計算結果との合わせ技、よくあるエラーまで実務パターンをまるごと紹介していきます。
スプレッドシートのSORTBY関数とは?基本構文と特徴
SORTBY関数(読み方:ソートバイ)は、指定した「基準範囲」の値で別の範囲を並べ替える 関数です。関数名は「SORT(並べ替え)+ BY(〜を基準に)」に由来します。
SORT関数は「何列目を基準にするか」を番号で指定します。一方SORTBY関数は「この範囲の値で並べ替える」と、範囲そのものを直接渡すのが特徴です。
NOTE
SORTBY関数はGoogleスプレッドシート独自の関数です。Excel 365にも同名のSORTBY関数がありますが、引数の仕様が一部異なります。本記事はGoogleスプレッドシート版の挙動を解説しています。
=SORTBY(範囲, 基準範囲1, 順序1, …) の引数
=SORTBY(範囲, 並べ替え基準範囲1, 順序1, [並べ替え基準範囲2, 順序2, ...])
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 範囲 | 必須 | 並べ替えたいデータ範囲(例: A2:D100) |
| 並べ替え基準範囲1 | 必須 | 基準にする1列(または1行)の範囲(例: D2:D100) |
| 順序1 | 任意 | 1 = 昇順 / -1 = 降順。省略すると昇順 |
| 並べ替え基準範囲2, 順序2 | 任意 | 第2基準以降。ペアで何度でも追加できる |
TIP
SORT関数の順序指定は
TRUE(昇順)/FALSE(降順)ですが、SORTBY関数は 1(昇順)/ -1(降順) です。ここは混同しやすいポイントなので、最初に押さえておいてください。
SORTBY関数が解決する3つの困りごと
普通の並べ替え(メニューの「データ」→「範囲を並べ替え」やSORT関数)では、対応しづらい場面があります。そんなときも、SORTBY関数ならすっきり書けます。
- 列の追加・削除に強い: 基準を範囲で指定するので、列番号がずれても壊れにくい
- 表の外の列を基準にできる: 結果に表示しない列でも、並べ替えの基準にだけ使える
- 別シートのデータも基準にできる: 「データはこのシート、評価は別シート」でもOK
このあと、それぞれのパターンを実例つきで見ていきます。
SORTBY関数の基本的な使い方(金額順・複数条件)
この記事では、次の売上データを使って説明していきます。
| 行 | A列(担当者) | B列(支店) | C列(商品) | D列(金額) |
|---|---|---|---|---|
| 2 | 田中 | 東京 | ノートPC | 150,000 |
| 3 | 佐藤 | 大阪 | モニター | 45,000 |
| 4 | 鈴木 | 東京 | キーボード | 8,000 |
| 5 | 高橋 | 名古屋 | ノートPC | 140,000 |
| 6 | 伊藤 | 大阪 | マウス | 3,000 |
| 7 | 山本 | 東京 | モニター | 45,000 |
| 8 | 中村 | 名古屋 | ノートPC | 150,000 |
金額の大きい順に並べ替える
まずは一番シンプルな例から。金額が大きい順に全データを並べ替えてみましょう。空いているセル(たとえばF2)に次の数式を入力します。
=SORTBY(A2:D8, D2:D8, -1)
各引数の意味はこうです。
- A2:D8 … 並べ替えたいデータ範囲(A〜D列の全体)
- D2:D8 … 基準にする列の範囲(金額列)
- -1 … 降順(大きい順)
結果はこのとおりです。
| F列 | G列 | H列 | I列 |
|---|---|---|---|
| 田中 | 東京 | ノートPC | 150,000 |
| 中村 | 名古屋 | ノートPC | 150,000 |
| 高橋 | 名古屋 | ノートPC | 140,000 |
| 佐藤 | 大阪 | モニター | 45,000 |
| 山本 | 東京 | モニター | 45,000 |
| 鈴木 | 東京 | キーボード | 8,000 |
| 伊藤 | 大阪 | マウス | 3,000 |
金額の大きい順に7件すべてが並びました。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列 |
|---|---|---|---|
| 佐藤 | 大阪 | モニター | 45,000 |
| 伊藤 | 大阪 | マウス | 3,000 |
| 中村 | 名古屋 | ノートPC | 150,000 |
| 高橋 | 名古屋 | ノートPC | 140,000 |
| 田中 | 東京 | ノートPC | 150,000 |
| 山本 | 東京 | モニター | 45,000 |
| 鈴木 | 東京 | キーボード | 8,000 |
まず支店名のあいうえお順(大阪→名古屋→東京)に並び、同じ支店のなかでは金額の大きい順に揃いました。基準と順序のペアは3つ・4つと増やせるので、第3キー・第4キーまで指定する複雑な並べ替えにも対応できます。
範囲指定の注意点(基準範囲は1列限定)
ここでひとつ注意点があります。並べ替え基準範囲は 1列(または1行)のみ です。たとえば =SORTBY(A2:D8, B2:D8, 1) のように複数列をまとめて基準にしようとすると #VALUE! エラーになります。複数列を基準にしたい場合は、基準と順序のペアで分けて書いてください。
SORTBY関数とSORT関数の違い・使い分け
SORTBY関数とSORT関数はどちらも並べ替えの関数ですが、仕組みも得意分野も違います。比較してみましょう。
| 比較項目 | SORT関数 | SORTBY関数 |
|---|---|---|
| 基準の指定方法 | 列番号(1, 2, 3…) | 列の範囲(D2:D100) |
| 順序の指定方法 | TRUE / FALSE | 1 / -1 |
| 列の追加・削除に強いか | 弱い(列番号がずれる) | 強い(範囲で直接指定) |
| 表の外の列を基準にできるか | できない | できる |
| 別シートの列を基準にできるか | できない | できる |
| 数式の書きやすさ | 短くてシンプル | やや長いが基準が明示的 |
| 複数条件 | できる | できる |
ざっくり言うと、SORT関数は「短く書けるけどメンテに弱い」。SORTBY関数は「長くなるけど壊れにくい」、というトレードオフです。
迷ったらSORTBY関数を使っておけば安心です。 列構成の変更に強いので、長期間使い続ける数式や、他の人が触る可能性のあるシートではSORTBY関数のほうが安全です。一時的なソートで列構成も固定なら、SORT関数の短さに利があります。
NOTE
並べ替え系3関数(SORT・SORTN・SORTBY)の全体像は SORT・SORTN・SORTBYの比較記事 で整理しています。上位N件だけ取り出したいときは SORTN関数の記事 もあわせてご覧ください。
実務で使えるSORTBY活用パターン5選
ここからは、現場でそのまま使える応用パターンを5つ紹介します。
パターン1: 別シートの評価点で社員リストを並べ替える
SORTBY関数の最大の強みは、基準列がデータ範囲の外にあっても使える ことです。たとえば「社員一覧」シートのA2:C10に社員データが、「評価」シートのB2:B10に評価点が入っているとします。評価点の高い順に社員を並べ替えるなら、こう書きます。
=SORTBY('社員一覧'!A2:C10, '評価'!B2:B10, -1)
SORT関数では「列番号」しか指定できないので、表の外にある列は基準にできません。SORTBY関数なら別シートの値でも自由に基準として使えます。マスタと評価表を分けて管理しているケースでとても便利です。
TIP
別シート参照では、シート名を
'シート名'!の形でくくります。シート名に空白や記号が含まれない場合はクォートを省略できますが、つけておくと安全です。
パターン2: FILTER+SORTBYで条件付き並べ替え(東京の売上ランキング)
FILTER関数と組み合わせると、条件で絞り込んだうえで並べ替えができます。「東京支店のデータだけを金額順に表示する」場合はこうです。
=SORTBY(FILTER(A2:D8, B2:B8="東京"), FILTER(D2:D8, B2:B8="東京"), -1)
ポイントは、基準範囲にも同じFILTER条件を適用すること。SORTBY関数は「範囲」と「基準範囲」の行数が一致している必要があります。FILTER後のデータと基準を同じ条件で絞り込めば、行数がそろいます。
TIP
SORT関数なら
=SORT(FILTER(A2:D8, B2:B8="東京"), 4, FALSE)と短く書けます。FILTER結果の中の列番号で基準を指定できるからです。「結果の表示列がそのまま基準になる」場面ではSORTのほうが楽な場合もあります。表の外を基準にしたいならSORTBY、というふうに使い分けてください。
パターン3: 計算結果(数式の値)を基準に並べ替える
SORTBY関数の基準範囲には、数式の計算結果もそのまま渡せます。「文字数の少ない順に商品名を並べる」場合はこうです。
=SORTBY(C2:C8, LEN(C2:C8), 1)
LEN関数(文字数を返す関数)で各商品名の文字数を計算し、その結果を基準にして昇順で並べ替えています。シート上に補助列を作らなくても並べ替えられるのが、SORTBY関数の柔軟なところです。
応用例として、「合計金額の大きい順に商品を並べる」なら、SUMIF関数(条件に合うセルを合計する関数)を基準にできます。
=SORTBY(UNIQUE(C2:C8), SUMIF(C2:C8, UNIQUE(C2:C8), D2:D8), -1)
UNIQUE関数(重複を除いて一覧化する関数)で商品の一覧を作り、各商品の合計金額で降順に並べる、という流れです。商品数が多くてもピボットを作らずに集計+並べ替えができますよ。
パターン4: SORTBY+INDEXでランキング表の特定列だけ取り出す
並べ替えた結果から特定の列だけを取り出したい場合は、INDEX関数(範囲から指定位置の値を返す関数)と組み合わせます。「金額順に並べ替えた結果から担当者名だけを取り出す」例です。
=INDEX(SORTBY(A2:D8, D2:D8, -1), , 1)
SORTBY関数で金額の降順に並べ替えた結果の 1列目(担当者名)だけ を返します。「ランキング1〜3位の名前だけ表示したい」「ダッシュボードに上位だけ見せたい」というときに便利です。
特定の行範囲だけ欲しいなら、ARRAYFORMULA+配列で上位3名に絞ることもできます。
=ARRAYFORMULA(INDEX(SORTBY(A2:D8, D2:D8, -1), {1;2;3}, 1))
{1;2;3} で1〜3行目だけを抽出しています。
パターン5: 複数列のスコア合算で並べ替える(重み付けランキング)
「品質点と速度点の合計で並べ替える」のような重み付けランキングも、SORTBY関数なら一発です。各社員の品質点(B列)と速度点(C列)を 7:3 で加重平均して並べ替える例です。
=SORTBY(A2:C10, B2:B10*0.7 + C2:C10*0.3, -1)
基準範囲のところで直接演算ができるので、補助列を作らずに重み付けスコアで並べ替えられます。評価制度の試算や、複数指標を組み合わせた優先順位付けに重宝しますよ。
SORTBY関数のよくあるエラーと対処法
SORTBY関数で出やすいエラーを表にまとめました。原因と対処法をセットで覚えておくと、つまずいてもサッと直せますよ。
| エラー | 原因 | 対処法 |
|---|---|---|
#REF! | 結果のスピル先(展開先)に既にデータがある | スピル先のセルを空にする |
#VALUE! | 順序に1・-1以外の値(TRUE/FALSE等)を指定 | 1(昇順)または-1(降順)にする |
#VALUE! | 範囲と基準範囲の行数が一致していない | 行数をそろえる(特にFILTER組み合わせ時に注意) |
#VALUE! | 基準範囲が複数列になっている | 基準範囲は1列(または1行)のみに |
#N/A | 範囲が空(データがない) | IFERRORでエラー時のメッセージを設定 |
| 結果が並ばない | 基準範囲の値が文字列と数値で混在 | データ型を統一する(VALUE関数で数値化) |
#VALUE!エラー: 順序指定の混同
特に多いのが、SORT関数のクセが残って TRUE/FALSE を書いてしまうパターンです。
=SORTBY(A2:D8, D2:D8, FALSE) → #VALUE!エラー
=SORTBY(A2:D8, D2:D8, -1) → 正しい
SORT関数は TRUE(昇順)/ FALSE(降順)、SORTBY関数は 1(昇順)/ -1(降順)です。脳内で「SORTBYは1か−1」とセットで覚えるとミスが減ります。
#VALUE!エラー: 行数の不一致
FILTERと組み合わせるときに起きがちなパターンです。
=SORTBY(FILTER(A2:D8, B2:B8="東京"), D2:D8, -1) → #VALUE!エラー
範囲はFILTERで3行に絞られているのに、基準範囲は元の7行のまま。これだと行数が合わないのでエラーになります。基準範囲にも同じFILTERを適用してください。
=SORTBY(FILTER(A2:D8, B2:B8="東京"), FILTER(D2:D8, B2:B8="東京"), -1)
エラーを非表示にする
数式が空セルを参照しているときの #N/A を消したいケースもあります。そんなときは IFERROR関数(エラー時に代替値を返す関数)で囲みます。
=IFERROR(SORTBY(A2:D8, D2:D8, -1), "データがありません")
ダッシュボードのように見栄えを整えたいシートでは、これだけで印象がぐっと変わります。
並べ替え機能(メニュー)とSORTBY関数の使い分け
「メニューの『データ』→『範囲を並べ替え』があるのに、わざわざ関数を使う必要ある?」と感じる方もいるかもしれません。実は両方で得意分野が違います。
| 用途 | おすすめ |
|---|---|
| 一度きりの並べ替え(並べたら終わり) | メニュー機能 |
| 元データを保ったまま別の場所に並べ替え結果を表示 | SORTBY関数 |
| データ追加で自動更新したい(動的なランキング表) | SORTBY関数 |
| 別シートのデータを基準にしたい | SORTBY関数 |
| ダッシュボードに組み込みたい | SORTBY関数 |
| データ件数が万件超で計算が重い | メニュー機能(または値貼り付け) |
メニュー機能は手軽ですが、データを書き換えてしまうので元の順番に戻すのが面倒です。SORTBY関数は元データを保ったまま並べ替え結果を別の場所に表示できるので、ダッシュボードや帳票で大活躍します。両方使えるようになると、用途で自然に選べるようになり、作業がぐっと速くなりますよ。
まとめ
SORTBY関数は、基準を「範囲」で直接指定して並べ替える関数です。SORT関数より少し長くなりますが、列の追加・削除に強く、表の外や別シートの列も基準にできるのが大きな強みです。
この記事で紹介した活用パターンをおさらいしましょう。
- 基本構文:
=SORTBY(範囲, 基準範囲1, 順序1, ...)。順序は1(昇順)/ -1(降順) - 複数条件: 基準と順序のペアを追加するだけでOK
- 別シート基準: 表の外や別シートの値でも基準にできる
- FILTER+SORTBY: 条件付き並べ替え。基準範囲にも同じFILTERを忘れずに
- 計算結果で並べ替え: LEN・SUMIF・加重スコアなど、その場で計算した値で並べ替え可能
- INDEX+SORTBY: 並べ替え結果から特定列だけ取り出す
- エラー対策: 順序は1/-1、行数は範囲と基準でそろえる、基準範囲は1列のみ
まずは「金額順に並べ替える」一番シンプルなパターンから試してみてください。一度作れば、データを追加するだけで並べ替え結果が自動更新されます。手作業のソート作業がなくなって、毎日の集計がラクになりますよ。
並べ替え系の関数全体は SORT・SORTN・SORTBYの比較記事 で整理しています。上位N件だけ取り出したいときは SORTN関数 もあわせてチェックしてみてください。
