ExcelのSORTBY関数の使い方|複数条件・別列基準

スポンサーリンク

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,0002024/4/5
鈴木総務部320,0002024/4/12
高橋営業部550,0002024/4/3
田中経理部280,0002024/4/18
伊藤営業部410,0002024/4/8
渡辺総務部350,0002024/4/15
山本経理部290,0002024/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,0002024/4/3
佐藤営業部480,0002024/4/5
伊藤営業部410,0002024/4/8
渡辺総務部350,0002024/4/15
鈴木総務部320,0002024/4/12
山本経理部290,0002024/4/22
田中経理部280,0002024/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,0002024/4/3
佐藤営業部480,0002024/4/5
伊藤営業部410,0002024/4/8
山本経理部290,0002024/4/22
田中経理部280,0002024/4/18
渡辺総務部350,0002024/4/15
鈴木総務部320,0002024/4/12

部署ごとにまとまり、各部署の中では売上の高い順に並んでいますね。なお、部署名のような漢字の文字列は、読みの五十音順ではなく文字コードの順で並びます。今回はたまたま「営業部→経理部→総務部」と読みの順と同じになりましたが、いつも一致するとは限りません。

部署を決まった順番で並べたいなら、部署ごとの並び順(営業部=1、総務部=2など)を入れた作業列を用意しましょう。その列を基準配列にすれば、配列外の列を基準にできる強みがそのまま活きますよ。

3キー以上で並べ替える

基準と順序のペアは、3組以上に増やすこともできます。たとえば「部署→日付→売上」の3段階で並べ替えるなら、次のように書きます。

=SORTBY(A2:D8, B2:B8, 1, D2:D8, 1, C2:C8, -1)

部署の昇順で並べ、同じ部署の中は日付の古い順、日付まで同じなら売上の高い順という指定です。結果は次のとおり。

担当者部署売上金額日付
高橋営業部550,0002024/4/3
佐藤営業部480,0002024/4/5
伊藤営業部410,0002024/4/8
田中経理部280,0002024/4/18
山本経理部290,0002024/4/22
鈴木総務部320,0002024/4/12
渡辺総務部350,0002024/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,0002024/4/3
佐藤営業部480,0002024/4/5
伊藤営業部410,0002024/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列を使います。

  1. E1セルに見出し「ふりがな」を入力する
  2. E2セルに =PHONETIC(A2) を入力する
  3. E2セルをE8までコピーする
  4. 表の右側の空いたセル(たとえばG2)に、次の数式を入力する
=SORTBY(A2:D8, E2:E8, 1)

E列のふりがなを基準に、A〜D列の表を昇順で並べ替える数式です。基準のE列は結果に表示されないので、表の見た目は4列のまま。先ほど紹介した「配列外の列を基準にできる」強みを、そのまま活かした使い方なんです。

担当者名を入力したときのふりがなが正しく登録されていれば、結果は次のようになります。

担当者部署売上金額日付
伊藤営業部410,0002024/4/8
佐藤営業部480,0002024/4/5
鈴木総務部320,0002024/4/12
高橋営業部550,0002024/4/3
田中経理部280,0002024/4/18
山本経理部290,0002024/4/22
渡辺総務部350,0002024/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キー並べ替えから試してみてくださいね。

スピル(動的配列)の関数をまとめて学ぶなら、スピル関数の入門記事もあわせて読んでみてください。


この記事で紹介した関数・関連記事

タイトルとURLをコピーしました