【Excel】SORTBY関数で複数の条件を使ってデータを並べ替える方法

この記事は約6分で読めます。

今回は、ExcelのSORTBY関数を使って、複数のキーでデータを並べ替える方法を紹介します。「部署ごとにまとめたうえで、売上の大きい順に並べたい」「元の表は動かさずに、別の場所に並べ替えた一覧を表示したい」といった場面で役立つ関数です。

SORTBY関数は、Microsoft 365版のExcel、Excel 2021以降、Web版のExcelなど、動的配列(スピル)に対応したExcelで利用できます。Excel 2019以前の買い切り版では使えないため、共有相手の環境にも注意してください。

SORTBY関数の基本

SORTBY関数でできること

SORTBY関数は、指定した範囲を、別の範囲や配列の値を基準にして並べ替えた結果を返します。結果は数式を入れたセルから下や右へ自動的に広がって表示されます(スピル)。元のデータには手を加えないため、元の表はそのまま残しておき、並べ替えた結果だけを別の場所に表示したいときに便利です。

構文

=SORTBY(配列, 基準配列1, [並べ替え順序1], [基準配列2, 並べ替え順序2], …)

  • 配列:並べ替えたい範囲です(必須)。
  • 基準配列1:並べ替えの基準にする範囲です(必須)。
  • 並べ替え順序1:1で昇順、-1で降順です。省略すると昇順になります。
  • 基準配列2以降:2番目、3番目の基準を追加できます。基準配列と並べ替え順序をペアで指定します。

SORT関数との違い

似た関数にSORT関数があります。SORT関数は「範囲の中の何列目で並べ替えるか」を番号で指定します。一方、SORTBY関数は基準となる範囲そのものを指定します。そのため、次のような点で扱いやすくなります。

  • 列番号を数えなくてよく、数式を読んだときに何で並べ替えているかがわかりやすい。
  • 基準にする列を、表示する範囲に含めなくてもよい。
  • 複数の基準を順に追加する書き方が直感的。

単一のキーで並べ替える例

A列に氏名、B列に部署、C列に売上がある表(2行目から20行目まで)を想定します。売上の大きい順に並べた一覧を、E2セルから表示したい場合は、次のように入力します。

=SORTBY(A2:C20, C2:C20, -1)

Enterキーを押すと、E2セルを起点に、3列分の並べ替え結果が表示されます。並べ替え順序を1にするか省略すれば、売上の小さい順になります。

複数キーで並べ替える例

部署ごとに、売上の大きい順に並べる

「まず部署名で昇順に並べ、同じ部署の中では売上の大きい順に並べる」場合は、基準を2つ指定します。

=SORTBY(A2:C20, B2:B20, 1, C2:C20, -1)

1つ目の基準(部署)で大きく並べ、その中で同じ値が続く部分を2つ目の基準(売上)で並べ替えます。基準を書く順番が優先順位になる点を押さえておくと、思いどおりの結果を得やすくなります。

3つ以上の基準を使う

基準はさらに追加できます。たとえばD列に入社日がある場合、「部署→売上の降順→入社日の昇順」のように指定できます。

=SORTBY(A2:D20, B2:B20, 1, C2:C20, -1, D2:D20, 1)

売上が同じ人が複数いても、入社日の順で並び順が決まるため、一覧の並びが安定します。

表示する列と基準の列を分けられる

SORTBY関数では、表示しない列を基準にして並べ替えることもできます。たとえば、氏名だけを売上の大きい順に一覧表示したい場合は、次のようにします。

=SORTBY(A2:A20, C2:C20, -1)

表示されるのは氏名だけですが、並び順は売上で決まります。ランキング表や、名前だけを並べた資料を作るときに便利です。

覚えておきたいエラーの条件

SORTBY関数を使っていて結果が表示されないときは、次の点を確認してください。

  • 基準配列は1行または1列であること:複数列をまとめて基準に指定することはできません。基準ごとに1列ずつ指定します。
  • 引数のサイズを揃えること:並べ替える範囲と基準の範囲は、同じ行数(または列数)にします。A2:C20を並べ替えるなら、基準もB2:B20のように2行目から20行目までにします。
  • 並べ替え順序は1か-1:それ以外の値を入れると #VALUE! エラーになります。
  • スピル先を空けておく:結果を表示する範囲に既に値が入っていると、#SPILL! エラーになります。数式を入れる位置の右側と下側を空けておきましょう。

便利に使うためのコツ

テーブルと組み合わせてデータの増減に対応する

元データをExcelテーブルに変換しておき、構造化参照で指定すると、行を追加・削除したときに並べ替え結果の範囲も自動で追従します。たとえばテーブル名が「売上表」なら、次のように書けます。

=SORTBY(売上表, 売上表[部署], 1, 売上表[売上], -1)

A2:C20のようなセル範囲で書くと、データが21行目以降に増えたときに数式を直す必要がありますが、テーブルならその手間を減らせます。

FILTER関数と組み合わせて絞り込みと並べ替えを同時に行う

「営業部だけを取り出して、売上の大きい順に並べたい」といった場合は、FILTER関数で抽出した結果をSORTBY関数で並べ替えます。

=SORTBY(FILTER(A2:C20, B2:B20=”営業部”), FILTER(C2:C20, B2:B20=”営業部”), -1)

並べ替える配列と基準配列は同じサイズである必要があるため、基準のほうにも同じ条件のFILTERをかけています。式が長くなる場合は、LET関数で途中の結果に名前を付けると読みやすくなります。

見出しは数式の外に置く

SORTBY関数の範囲に見出し行を含めると、見出しも並べ替えの対象になってしまいます。見出しはデータ範囲から外し、結果を表示するセルの上の行に、見出しを別途入力しておくのが扱いやすい方法です。

並べ替え結果は数式なので元データと連動する

SORTBY関数の結果は、元データが変わると自動で更新されます。売上の数値を入力し直せば、ランキングも即座に入れ替わります。一方で、結果のセルを個別に書き換えることはできません。特定の時点の並び順を残したい場合は、結果をコピーして値として貼り付けておくとよいでしょう。

リスト全体のランダムな並べ替えにも使える

基準配列にRANDARRAY関数を使うと、一覧の順番をランダムに入れ替えられます。たとえば、A2:A11にある10件の名前をランダムに並べたい場合は、次のように書けます。

=SORTBY(A2:A11, RANDARRAY(ROWS(A2:A11)))

発表順や担当の割り振りを決めるときなどに使えます。ワークシートが再計算されるたびに順番が変わる点に注意してください。

並べ替え機能との使い分け

Excelには、[データ]タブの[並べ替え]機能もあります。こちらは元の表そのものの並び順を入れ替える操作です。

  • 元の表の順番を変えてよい場合:[並べ替え]機能が手軽です。
  • 元の表は入力順のまま残したい場合:SORTBY関数で別の場所に並べ替え結果を表示すると、元データを崩さずに済みます。
  • データが頻繁に更新される場合:SORTBY関数なら、更新のたびに並べ替え操作をやり直す必要がありません。

まとめ

SORTBY関数は、基準となる範囲を直接指定して、複数キーの並べ替えを数式で実現できる関数です。ポイントを振り返ります。

  • 構文は =SORTBY(配列, 基準配列1, 並べ替え順序1, 基準配列2, 並べ替え順序2, …)。
  • 並べ替え順序は1が昇順、-1が降順で、省略すると昇順。
  • 基準を書いた順番が優先順位になる。
  • 基準配列は1行または1列で、並べ替える範囲と同じサイズにする。
  • テーブルやFILTER関数と組み合わせると、データの増減や絞り込みにも対応できる。

元の表を残したまま並べ替えた一覧を作れるので、集計表やランキング表、担当者別の一覧など、日常の資料作りに取り入れてみてください。