Excelで表を並べ替えるとき、「部署ごとにまとめて、その中は売上の高い順にしたい」と思ったことはありませんか? SORT関数(並べ替えの基本関数)は、基準を列番号で指定します。そのため表に列を挿入すると、番号と実際の列がずれてしまうんですよね。
そこで活躍するのが、ExcelのSORTBY関数です。基準にしたい列を範囲で直接指定するので、列の増減に強く、複数条件の並べ替えも1つの数式で書けます。
この記事では、SORTBY関数の基本から応用まで、サンプルデータを使って順番に解説します。FILTER関数(条件に合うデータを抜き出す関数)との組み合わせや、エラーの対処法もまとめました。困ったときの辞書代わりに使ってみてください。
Excel SORTBY関数とは?別列基準で並べ替える関数
SORTBY関数(読み方:ソートバイ)は、指定した基準の値をもとに表を並べ替える関数です。英語の「sort by」には、「〜を基準に並べ替える」という意味があります。
名前のとおり、SORTBY関数は「何を基準に並べるか」を範囲で渡すのが特徴。売上金額で並べたいなら、売上金額の列の範囲をそのまま指定すればOKです。
では、なぜSORT関数ではなくSORTBY関数を選ぶのでしょうか? 主な理由は次の3つです。
- 列の増減に強い: 基準を範囲で指定するので、列を挿入しても参照が自動で調整される
- 複数条件に対応: 基準と順序のペアを足すだけで、2段階・3段階の並べ替えができる
- 表の外の列も基準にできる: 結果に表示しない列を、並べ替えのキーに使える
特に3つ目は、SORT関数にはないSORTBY関数ならではの強み。記事の後半では、この性質を活かした実務パターンも紹介しますよ。
SORTBY関数が使えるExcelのバージョン
SORTBY関数は、Excelのバージョンによって使える・使えないが分かれる関数です。まずは、お使いの環境が対応しているか確認しておきましょう。
対応バージョン: Microsoft 365(Windows/Mac)、Excel 2021、Excel 2024、Excel for the web/Excel 2019以前は非対応(#NAME?エラー)
Excel 2019以前で数式を入力すると、関数名が認識されず#NAME?エラーになります。古いExcelを使っている人とファイルを共有するときは、相手の環境にも気を配りたいところ。
お使いのバージョンは、Windows版なら[ファイル]タブ→[アカウント]で確認できます。動的配列関数がどの版から使えるかは、モダンExcel解説の対応表もチェックしてみてください。
基本構文と引数
SORTBY関数の構文は、次のとおりです。
=SORTBY(配列, 基準配列1, [並べ替え順序1], [基準配列2, 並べ替え順序2], ...)
| 引数 | 必須/省略可 | 説明 | 既定値 |
|---|---|---|---|
| 配列 | 必須 | 並べ替えたいセル範囲または配列 | – |
| 基準配列1 | 必須 | 並べ替えの基準にする範囲(1列または1行のみ) | – |
| 並べ替え順序1 | 省略可 | 1=昇順/-1=降順 | 1(昇順) |
| 基準配列2以降 | 省略可 | 2番目以降の基準と順序のペア(続けて追加できる) | – |
必須の引数は「配列」と「基準配列1」の2つだけ。並べ替え順序を省略すると、昇順(1)として扱われます。
引数の指定で注意したいのは、次の3点です。
- 基準配列は1列(または1行)だけを指定する
- 基準配列の行数は、配列の行数とそろえる
- 並べ替え順序には、1か-1のどちらかを指定する
どれか1つでも外れると、#VALUE!エラーになります。最初に押さえておけば、あとで慌てずに済みますよ。
SORT関数との違い|使い分けの判断基準
SORTBY関数とよく比べられるのが、SORT関数です。どちらも表を並べ替える関数ですが、基準の渡し方が大きく違います。
たとえばA〜D列の表で、C列の売上金額を降順に並べる場合を比べてみましょう。
=SORT(A2:D8, 3, -1)
=SORTBY(A2:D8, C2:C8, -1)
SORT関数は「表の3列目」と番号で指定し、SORTBY関数は「C2:C8」と範囲で指定します。結果は同じですが、列を挿入したときの強さに差が出るんです。
もしB列とC列の間に列を1つ挿入すると、SORT関数の「3」は新しく挿入した空の列を指してしまいます。SORTBY関数なら参照が自動で D2:D8 に変わるので、基準は売上金額のまま。
| 比較項目 | SORT関数 | SORTBY関数 |
|---|---|---|
| 基準の指定方法 | 列番号(数値) | 範囲(C2:C8など) |
| 複数の基準 | 列番号を配列定数で並べる(例: {2,3}) | 範囲と順序のペアを追加 |
| 列の挿入・削除 | 番号と実際の列がずれることがある | 参照が追従するので壊れにくい |
| 列方向(横方向)の並べ替え | by_col引数にTRUEで可能 | 専用の引数はない |
| 配列外の列を基準にする | できない | できる |
| 数式の簡潔さ | 引数が少なくシンプル | 基準ごとに範囲の指定が必要 |
実はSORT関数も、=SORT(A2:D8, {2,3}, {1,-1}) のように書けば複数の基準で並べ替えられます。列番号と順序を波かっこ { } で並べる「配列定数」という書き方です。ただし番号で指定する点は同じなので、列の挿入に弱いことは変わりません。
SORT関数が向いているケース
- 基準が1つだけのシンプルな並べ替え
- 表の先頭列で並べるだけのとき(
=SORT(A2:D8)で済む) - 列方向(横方向)に並べ替えたいとき
SORTBY関数が向いているケース
- 2つ以上の基準で並べ替えたいとき
- 列の挿入・削除がよくある表
- 結果に表示しない列を基準にしたいとき
迷ったときは、あとから基準を足しやすいSORTBY関数を選んでおくと安心です。SORT関数そのものの使い方は、SORT関数の記事も参考にしてみてください。
基本の使い方|単一基準・複数キーで並べ替える
ここからは、実際の数式を見ていきましょう。以下の売上データ(A1:D8)を使って解説します。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 鈴木 | 総務部 | 320,000 | 2024/4/12 |
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 田中 | 経理部 | 280,000 | 2024/4/18 |
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
| 渡辺 | 総務部 | 350,000 | 2024/4/15 |
| 山本 | 経理部 | 290,000 | 2024/4/22 |
1行目が見出し、2〜8行目がデータという配置です。数式は、表の右側にある空いたセルに入力してください。
SORTBY関数の結果は、数式を入れたセルから4列×7行ぶん自動で広がります。この動きを「スピル」と呼び、広がる先のセルは空けておく必要がありますよ。
売上金額を降順で並べ替える
まずは、売上金額が高い順に並べ替えてみます。基準にしたいC列の範囲を、第2引数に直接指定するのがポイント。
=SORTBY(A2:D8, C2:C8, -1)
第1引数が表全体(A2:D8)、第2引数が基準列(C2:C8)、第3引数の-1が降順の指定です。結果は以下のとおり。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
| 渡辺 | 総務部 | 350,000 | 2024/4/15 |
| 鈴木 | 総務部 | 320,000 | 2024/4/12 |
| 山本 | 経理部 | 290,000 | 2024/4/22 |
| 田中 | 経理部 | 280,000 | 2024/4/18 |
売上金額の高い順に、担当者・部署・日付も一緒に並べ替わりましたね。行ごとまとめて動くので、データの対応がくずれる心配はありませんよ。
日付を昇順で並べ替える
次は、日付の古い順に並べ替える例です。第3引数を1(昇順)にします。
=SORTBY(A2:D8, D2:D8, 1)
昇順は既定値なので、第3引数を省略した =SORTBY(A2:D8, D2:D8) でもOK。結果は日付の古い順に、高橋→佐藤→伊藤→鈴木→渡辺→田中→山本と並びます。
ただし、日付が文字列として入力されていると、意図した順にならないことがあります。セルの値が日付として認識されているか、確認してみてください。
配列外の列を基準にする
SORTBY関数の大きな特長は、表示するデータの外にある列でも基準に使えることです。たとえばE列に「表示順」の番号を入れておけば、A〜D列のデータをE列の順に並べ替えられます。
=SORTBY(A2:D8, E2:E8, 1)
結果に出てくるのはA〜D列の4列だけで、基準にしたE列は表示されません。「並べ替えには使いたいけれど、見せる必要はない列」があるときに便利なんです。
SORT関数では、この書き方はできません。基準を「配列の中の何列目か」でしか指定できないからです。この性質は、後半で紹介する五十音順の並べ替えでも活躍しますよ。
部署→売上の2キーで並べ替える
SORTBY関数の真骨頂は、複数の基準で並べ替えられること。基準配列と並べ替え順序のペアを追加するだけで、2段階の並べ替えができます。
ここでは部署を昇順で並べ、同じ部署の中では売上金額を降順にしてみましょう。
=SORTBY(A2:D8, B2:B8, 1, C2:C8, -1)
第2・3引数が1つ目の基準(部署の昇順)、第4・5引数が2つ目の基準(売上の降順)です。1つ目の基準で同じ値が並んだときに、2つ目の基準が使われる仕組みになっています。結果は次のとおり。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
| 山本 | 経理部 | 290,000 | 2024/4/22 |
| 田中 | 経理部 | 280,000 | 2024/4/18 |
| 渡辺 | 総務部 | 350,000 | 2024/4/15 |
| 鈴木 | 総務部 | 320,000 | 2024/4/12 |
部署ごとにまとまり、各部署の中では売上の高い順に並んでいますね。なお、部署名のような漢字の文字列は、読みの五十音順ではなく文字コードの順で並びます。今回はたまたま「営業部→経理部→総務部」と読みの順と同じになりましたが、いつも一致するとは限りません。
部署を決まった順番で並べたいなら、部署ごとの並び順(営業部=1、総務部=2など)を入れた作業列を用意しましょう。その列を基準配列にすれば、配列外の列を基準にできる強みがそのまま活きますよ。
3キー以上で並べ替える
基準と順序のペアは、3組以上に増やすこともできます。たとえば「部署→日付→売上」の3段階で並べ替えるなら、次のように書きます。
=SORTBY(A2:D8, B2:B8, 1, D2:D8, 1, C2:C8, -1)
部署の昇順で並べ、同じ部署の中は日付の古い順、日付まで同じなら売上の高い順という指定です。結果は次のとおり。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
| 田中 | 経理部 | 280,000 | 2024/4/18 |
| 山本 | 経理部 | 290,000 | 2024/4/22 |
| 鈴木 | 総務部 | 320,000 | 2024/4/12 |
| 渡辺 | 総務部 | 350,000 | 2024/4/15 |
2キーの例と見比べると、経理部と総務部の中の順番が入れ替わっていますね。2つ目の基準を、売上から日付に変えたためです。
サンプルデータには同じ日付がないため、3つ目の基準(売上)は結果に影響していません。とはいえ実務では、同じ日付に複数の取引が並ぶこともよくありますよね。そんなとき3つ目の基準があれば、並び順が最後まで決まります。
ペアが増えても、「基準列, 順序」の組を並べているだけ。落ち着いて1組ずつ足してみてください。
FILTER関数と組み合わせる|抽出+並べ替えを一発で
「営業部だけを売上順に並べたい」のように、条件で絞り込んでから並べ替えたい場面は多いですよね。そんなときは、FILTER関数(条件に合うデータを抜き出す関数)とSORTBY関数を組み合わせます。
抽出と並べ替えが1つの数式で終わるので、元データを書き換えれば結果も自動で更新されます。毎回フィルターをかけてから並べ替える手間も、もういりませんよ。
条件抽出しながら並べ替える基本パターン
営業部のデータだけを、売上金額の高い順に表示してみましょう。
=SORTBY(FILTER(A2:D8, B2:B8="営業部"), FILTER(C2:C8, B2:B8="営業部"), -1)
ちょっとむずかしく見えますが、やっていることはシンプルです。数式は、次の3つの部品でできています。
FILTER(A2:D8, B2:B8="営業部"): 営業部の行だけを抜き出した表(配列)FILTER(C2:C8, B2:B8="営業部"): 営業部の売上金額だけを抜き出した列(基準配列)-1: 降順の指定
結果は、以下のとおりです。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
営業部の3人が、売上の高い順に並びました。数式内に2か所ある「営業部」を「総務部」に書き換えれば、総務部の2人が同じように並びます。
ポイントは、基準列も同じ条件でFILTERしていること。SORTBY関数は、配列と基準配列の行数がそろっていないとエラーになるからです。
もし基準配列を C2:C8 のままにすると、配列は3行・基準配列は7行でサイズが合いません。この場合は#VALUE!エラーになるので注意してください。
基準が表の中の1列だけなら、SORT関数でも同じ結果になります。
=SORT(FILTER(A2:D8, B2:B8="営業部"), 3, -1)
FILTERが1回で済むぶん、こちらのほうがシンプル。複数の基準で並べたいときこそ、SORTBY関数の出番です。
配列と基準配列のサイズ不一致エラーをLET関数で防ぐ
FILTER+SORTBYで特につまずきやすいのが、2つのFILTERの条件がずれるミスです。たとえば条件を「総務部」に変えるとき、片方だけ直し忘れると行数が合わず#VALUE!エラーになります。
さらに厄介なのは、たまたま行数が同じだった場合。エラーは出ないのに、別の条件で抜き出した値を基準に並んでしまうことがあります。
そこで役立つのが、LET関数(計算式や値に名前を付けて、数式の中で使い回せる関数)です。条件式に名前を付けて1か所にまとめれば、2つのFILTERに必ず同じ条件が渡ります。
=LET(cond, B2:B8="営業部", SORTBY(FILTER(A2:D8, cond), FILTER(C2:C8, cond), -1))
数式の中身を分解してみましょう。
cond, B2:B8="営業部": 条件式に「cond」という名前を付けるFILTER(A2:D8, cond): condの条件で表を抜き出す(配列)FILTER(C2:C8, cond): 同じcondで売上金額を抜き出す(基準配列)
結果は、先ほどの基本パターンと同じ営業部の3行(高橋→佐藤→伊藤)です。条件を変えたいときは「営業部」の1か所を書き換えるだけなので、直し忘れが起きません。
なお、LET関数を使ってもFILTERの計算が1回に減るわけではありません。効果はあくまで「条件のずれによる入力ミスを防ぐこと」と考えておきましょう。
LET関数の対応バージョンは、SORTBY関数と同じです。Microsoft 365、Excel 2021・2024、Excel for the webで使えますよ。
抽出結果が0件のときの#CALC!エラーに備える
FILTER関数は、条件に合うデータが1件もなく第3引数も省略されていると、#CALC!エラーを返します。たとえば表にない「企画部」を条件にすると、抽出結果が0件になり、SORTBY関数の結果もエラーになってしまいます。
これを防ぐのが、FILTER関数の第3引数(空の場合の値)です。SORTBY関数と組み合わせるときは、2つのFILTERの両方に同じ値を指定しておきましょう。
=LET(cond, B2:B8="企画部", SORTBY(FILTER(A2:D8, cond, "該当なし"), FILTER(C2:C8, cond, "該当なし"), -1))
この形なら、0件のときはエラーではなく「該当なし」と表示されます。片方のFILTERだけに第3引数を入れると、もう片方のエラーが残るので気をつけてください。条件を切り替えて使う表なら、最初から第3引数を入れておくと安心ですよ。
実務で使える応用パターン|PHONETIC・VSTACKとの組み合わせ
ここからは、ほかの関数と組み合わせた実務パターンを2つ紹介します。「名簿を五十音順にしたい」「月別のシートをまとめて並べたい」といった、事務作業でよくある悩みに効く組み合わせですよ。
PHONETIC関数で五十音順に並べ替える
担当者名で =SORTBY(A2:D8, A2:A8, 1) と並べ替えても、五十音順になるとは限りません。漢字の文字列は、読みではなく文字コードの順で比較されるからです。
そこで使うのが、PHONETIC関数(セルのふりがなを取り出す関数)です。ふりがなを基準にすれば、読みの順に並べ替えられます。
ただし、PHONETIC関数は A2:A8 のような範囲をまとめて渡す使い方には向きません。公式ヘルプによると、範囲を指定した場合は左上隅のセルのふりがなだけが返されます。
解決策は、1行ずつふりがなを取り出す作業列を作ること。ここでは、表の右隣にある空いたE列を使います。
- E1セルに見出し「ふりがな」を入力する
- E2セルに
=PHONETIC(A2)を入力する - E2セルをE8までコピーする
- 表の右側の空いたセル(たとえばG2)に、次の数式を入力する
=SORTBY(A2:D8, E2:E8, 1)
E列のふりがなを基準に、A〜D列の表を昇順で並べ替える数式です。基準のE列は結果に表示されないので、表の見た目は4列のまま。先ほど紹介した「配列外の列を基準にできる」強みを、そのまま活かした使い方なんです。
担当者名を入力したときのふりがなが正しく登録されていれば、結果は次のようになります。
| 担当者 | 部署 | 売上金額 | 日付 |
|---|---|---|---|
| 伊藤 | 営業部 | 410,000 | 2024/4/8 |
| 佐藤 | 営業部 | 480,000 | 2024/4/5 |
| 鈴木 | 総務部 | 320,000 | 2024/4/12 |
| 高橋 | 営業部 | 550,000 | 2024/4/3 |
| 田中 | 経理部 | 280,000 | 2024/4/18 |
| 山本 | 経理部 | 290,000 | 2024/4/22 |
| 渡辺 | 総務部 | 350,000 | 2024/4/15 |
イトウ→サトウ→スズキ→タカハシ→タナカ→ヤマモト→ワタナベと、読みの五十音順に並びましたね。
PHONETIC関数を使うときは、次の2点に気をつけてください。
- ふりがな情報がないセル: CSVから取り込んだデータや貼り付けたデータは、ふりがな情報を持たないことがあります。その場合は読みが取れず、五十音順に並ばないことも。
- Excel for the web: 公式ヘルプの対応バージョン一覧に、Web版の記載がありません。Web版では使えない可能性がある点を覚えておきましょう。
ふりがなが取れないセルは、Windows版なら「ふりがなの編集」(Shift+Alt+↑)で直せます。CSVデータのふりがなをまとめて整える方法は、PHONETIC関数の記事で詳しく解説していますよ。
VSTACK関数で複数シートを統合して並べ替える
月ごとにシートが分かれた売上データを、1つにまとめて並べ替えたいこともありますよね。そんなときは、VSTACK関数(複数の範囲を縦につなげる関数)で結合してから、SORTBY関数で並べ替えます。
対応バージョン(VSTACK関数): Microsoft 365(Windows/Mac)、Excel 2024、Excel for the web/Excel 2021以前は非対応
SORTBY関数が使えるExcel 2021でも、VSTACK関数は使えません。SORTBY関数より対応範囲が狭い点に注意しましょう。
Sheet1とSheet2に、それぞれA2:D8の売上データがある場合の数式です。
=SORTBY(VSTACK(Sheet1!A2:D8, Sheet2!A2:D8), VSTACK(Sheet1!C2:C8, Sheet2!C2:C8), -1)
2つのシートを縦につないだ14行の表を、売上金額の高い順に並べ替えています。ポイントは、データ全体(配列)と基準列(基準配列)の両方をVSTACKでつなぐことです。
配列は7行+7行=14行、基準配列も7行+7行=14行になり、行数がそろいます。基準配列を片方のシートの範囲だけにすると、行数が合わず#VALUE!エラーになるので要注意。
シートごとに行数が違う場合も、考え方は同じ。たとえばSheet2のデータが10行なら、Sheet2側の範囲は A2:D11 と C2:C11 にします。
なお、つなぐ表の列数がそろっていないと、足りない列は#N/Aで埋められます。各シートの列の並びは、あらかじめそろえておきましょう。そうすれば、月別シートを手作業でコピペしてまとめる必要はもうありませんよ。
よくあるエラーと対処法
SORTBY関数でうまくいかないときは、まず以下の表で症状を確認してみてください。
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| #SPILL!エラー | スピル先に値や結合セルがある/テーブル内に入力した | 広がる先を空けて結合を解除する/テーブルの外に入力する |
| #VALUE!エラー | 基準配列が複数列(複数行)になっている | 基準配列を1列(または1行)にする |
| #VALUE!エラー | 並べ替え順序が1・-1以外 | 1(昇順)か-1(降順)に直す |
| #VALUE!エラー | 配列と基準配列の行数が違う | 両方の範囲の行数をそろえる |
| #NAME?エラー | 対応していないバージョン(Excel 2019以前) | Microsoft 365・Excel 2021以降・Excel for the webで開く |
| #CALC!エラー | FILTERの抽出結果が0件 | FILTERの第3引数(空の場合の値)を指定する |
| 数値の並び順がおかしい | 文字列として入力された数字が混ざっている | VALUE関数などで数値にそろえる |
| 名前が五十音順にならない | 漢字は読みではなく文字コードの順で並ぶ | PHONETIC関数の作業列を基準にする |
FILTER関数と組み合わせたときのサイズ不一致なら、LET関数で条件をまとめる書き方が効きます。それ以外でつまずきやすいものを、いくつか補足しておきますね。
#SPILL!エラーは、結果が広がる範囲にすでに何か入っていると起きます。見た目は空でも、スペースだけが入ったセルが残っていることも。範囲をまとめて選んで、内容を削除してみてください。
#NAME?エラーは、SORTBY関数に対応していないExcel 2019以前で起きるエラーです。古いバージョンの人とファイルをやり取りするなら、[データ]タブの[並べ替え]で並べ替えた表を渡すのも一案でしょう。
数値の並び順がおかしいときは、数字が文字列として入力されていないか確認します。Excelの並べ替えでは、数値と「文字列の数字」が別物として扱われるためです。VALUE関数(文字列の数字を数値に変換する関数)で数値にそろえてから、並べ替えてみてください。
まとめ
この記事では、ExcelのSORTBY関数の使い方を解説しました。最後に、ポイントをおさらいしておきましょう。
- SORTBY関数は、基準にする列を範囲で直接指定して並べ替える関数
- 基準と順序のペアを追加すれば、複数条件で並べ替えられる
- 結果に表示しない列(配列外の列)も基準に使える
- FILTER関数と組み合わせると、抽出と並べ替えを1つの数式で書ける
- 条件のずれが心配なら、LET関数で条件を1か所にまとめる
- 五十音順にしたいときは、PHONETIC関数で作った作業列を基準にする
- 使えるのはMicrosoft 365・Excel 2021・Excel 2024・Excel for the web
基準が1つだけなら、SORT関数のほうがシンプルに書けます。一方で、複数条件や列の増減がある表なら、SORTBY関数のほうが扱いやすいはず。まずは「部署→売上」の2キー並べ替えから試してみてくださいね。
スピル(動的配列)の関数をまとめて学ぶなら、スピル関数の入門記事もあわせて読んでみてください。
