【エクセル】SORTBY関数で複数の列を並べ替えする方法。データの追加も自動で対応

ExcelのSORTBY関数で複数条件で並べ替えする方法

Excel(エクセル)のSORTBY関数は、複数の列(行)を基準にデータを並べ替えすることができる関数です。

「フィルター」機能と「並べ替え」機能では元データ自体を並べ替えしていました。

しかし、SORTBY関数は元データはそのままで、異なる場所に並べ替え後のリストを作成できる、というメリットがあります。

この記事では、SORTBY関数の使い方を詳しく紹介していきます。

SORTBY関数とは?

SORTBY関数の読み方は、”ソートバイ”です。英語の「sort by」が「分別する」を意味しているところが名前の由来です。

SORTBY関数とは、指定したデータを複数の列(行)を基準に並べ替えする関数です。

「フィルター」機能と「並べ替え」機能とは違い、SORTBY関数は元データはそのままで、異なる場所に並べ替え後のリストを作成します。

図解.ExcelのSORTBY関数で出来ること
図解.ExcelのSORTBY関数で出来ること

ただし、SORTBY関数が使えるのは、バージョンがMicrosoft365(サブスク)とExcel2021以降のユーザーに限定されています。

一方、SORTBY関数に似た関数にSORT関数があります。

SORT関数とSORTBY関数との違いは、SORT関数が1つの列を基準にしているのに対し、SORTBY関数は複数の列(行)を基準に並べ替えすることができます。

SORTBY関数を使うメリットは以下のとおりです。

SORTBY関数を使うメリット

・元データは並べ替えせずに、並べ替えデータを新規で作成できる

・縦方向だけでなく、横方向にも並べ替えが可能

・データが大きくても、SORTBY関数の挿入は1セルだけで済む

・データを更新しても自動で並べ替えに反映される

なお、SORT関数の使い方は、下の記事で使い方を紹介しているので合わせて参考にしてください。

SORTBY関数の書式と引数

まず、SORTBY関数の書式と引数を詳しく見ていきましょう。

SORTBY関数の書式は以下のとおりです。

「基準列」と「順序」の引数を1セットとして、複数の並べ替えのルールを設定することができます。

=SORTBY(配列,基準列1,順序1,[基準列2],[順序2]・・・)

引数「配列」
並べ替えしたいデータのセル範囲を指定します。(例:B3:E11)

第2引数「基準列1」
優先順位1位で並べ替えしたい列(行)を指定します。(例:C3:C11、F4:H4)

第3引数「順序1」
第2引数で指定した列(行)を昇順で並べ替えする場合は「1」は、降順の場合は 「-1」を指定します。(例:1,-1)

第4引数「基準列2」
優先順位2位で並べ替えしたい列(行)を指定します。(例:D3:D11、F7:H7)

第5引数「順序2」
第4引数で指定した列(行)を昇順で並べ替えする場合は「1」は、降順の場合は 「-1」を指定します。(例:1,-1)

SORTBY関数の使い方を紹介

SORTBY関数の使い方を詳しく解説していきます。

SORTBY関数は1つのセルに挿入するだけで、複数の行と列に結果が拡張されて並べ替えの結果が表示されます。(スピル機能)

SORTBY関数で複数の列に優先順位をつけて並べ替え

下の表にSORTBY関数を使って、優先順位1位で「性別」列を小さい順に、優先順位2位で「体重」列を大きい順に並べ替えする方法を紹介します。

SORTBY関数を使う元データ
SORTBY関数を使う元データ

手順1.見出し行をコピペ

SORTBY関数を挿入する前に、空いているセルに、行見出しをコピペします。

SORTBY関数/手順1:見出しをコピペ
SORTBY関数/手順1:見出しをコピペ

手順2.SORTBY関数を第1引数を指定

見出しの左下のF3セルにSORTBY関数を挿入します。第1引数「配列」は、見出しを除いてた並べ替えしたいデータ範囲(B3:D11)を選択します。

=SORTBY(B3:D11,

SORTBY関数/手順2:並べ替えするセル範囲を選択
SORTBY関数/手順2:並べ替えするセル範囲を選択

手順3.SORTBY関数を第2引数を指定

SORTBY関数の第2引数「基準列1」は、優先順位で並べ替えしたい列のセル範囲を指定します。

「性別」列はC列にあるので、「C3:C11」を指定します。

=SORTBY(B3:D11,C3:C11,

SORTBY関数/手順3:第1優先の並べ替えする列を選択
SORTBY関数/手順3:第1優先の並べ替えする列を選択

手順4.SORTBY関数の第3引数を指定

SORTBY関数の第3引数「順序1」は、手順3で指定した列を昇順で並べ替えしたいか降順で並べ替えしたいかを指定します。

昇順(小さい順)の場合は「1」(もしくはブランク)、降順(大きい順)の場合は「-1」を入力します。

=SORTBY(B3:D11,C3:C11,1,

SORTBY関数/手順4:昇順か降順かを指定
SORTBY関数/手順4:昇順か降順かを指定

手順5.SORTBY関数の第4引数以降を指定

手順3,4と同じように、SORTBY関数の第4引数「基準列2」と第5引数「順序2」に、優先順位2位の「体重」列を降順で並べ替えする設定を行います。

=SORTBY(B3:D11,C3:C11,1,D3:D11,-1)

SORTBY関数/手順5:優先順位2位の並べ替えルールを指定
SORTBY関数/手順5:優先順位2位の並べ替えルールを指定

手順6.SORTBY関数による並べ替えが完成

Enterキーを押してSORTBY関数を確定させてください。以上の操作で、下の図のようにデータを「性別」列と「体重」列を優先順位をつけて並べ替えすることができました。

SORTBY関数/手順6:複数条件で並びの変更が完了
SORTBY関数/手順6:複数条件で並びの変更が完了

SORTBY関数はF3セルの1つのセルにしか挿入していませんが、スピル機能によりF3セル以外のセルにも並べ替えされた結果が拡張されます。

SORTBY関数でエラーが発生する原因と解決策

SORTBY関数でエラー値「#スピル!」や「#VALUE!が発生する場合があります。

「#スピル!」が発生するのは、SORTBY関数の結果を表示させようとしている周りのセル範囲に文字や数値が入力されていることが原因です。

エラーが発生した際は、並べ替え後のデータが表示されるセル範囲に文字が入力されていないか確認し削除してください。

「#VALUE!」が発生する場合は、SORTBY関数で指定したデータ範囲や列のセル範囲のサイズを確認してください。

下の図のように、SORTBY関数の第2引数のセル範囲が「C3:C11」とすべきところを「C3:C13」となっていると、「#VALUE!」は発生します。

SORTBY関数でエラー値「VALUE!」が発生する原因
SORTBY関数でエラー値「VALUE!」が発生する原因

SORTBY関数の事例を紹介

SORTBY関数の基本的な使い方は上記で紹介したとおりです。

続いて、SORTBY関数の応用編として、SORTBY関数を使った事例を4つ紹介します。

SORTBY関数/事例1:横方向に複数条件で並べ替え

SORTBY関数で、データを横方向に複数の列を基準に並べ替えすることもできます。

横方向に並べ替えするときは、SORTBY関数の第2引数「基準列1」と第4引数「基準列2」を水平方向にセル範囲を指定するだけです。

=SORTBY(C2:I4,C3:I3,1,C4:I4,-1)

SORTBY関数で表を横方向に並べ替えする方法
SORTBY関数で表を横方向に並べ替えする方法

そうすると、「性別」行を左から順に昇順に、「体重」行を左から順に降順に並べ替えすることができます。

SORTBY関数で横方向に並べ替えした結果
SORTBY関数で横方向に並べ替えした結果

SORTBY関数/事例2:データの追加を自動で反映

下の図のように最下行に元データを追加しても、残念ながらSORTBY関数の結果は自動で反映されません

データを追加してもSORTBY関数は自動で反映されない
データを追加してもSORTBY関数は自動で反映されない

データを反映させるためには、G3セルに挿入したSORTBY関数で指定したセル範囲を修正する必要があります。

しかし、IF関数とSORTBY関数を組み合わせることで、データの追加を自動反映させることができるので、その方法を解説します。

元データを後から追加する前提で、SORTBY関数のセル範囲を空白セルも含めて広めに設定しておくと、SORTBY関数の結果は「0」と表示されます。

SORTBY関数は空白データに対して「0」を返す
SORTBY関数は空白データに対して「0」を返す

そのため、IF関数を使って、SORTBY関数の結果が「0」であればセルがブランクとなるように設定します。

利用する数式は以下のとおりです。

IF関数の第1引数「論理式」に「SORTBY関数の結果が0以外の場合」を設定し、第2引数「値が真の場合」にSORTBY関数、第3引数「値が偽の場合」に「””」を設定します。

=IF(SORTBY(B3:D11,C3:C11,1,D3:D11,-1)<>0,SORTBY(B3:D11,C3:C11,1,D3:D11,-1),"")

SORTBY関数とIF関数で元データの追加が自動で反映
SORTBY関数とIF関数で元データの追加が自動で反映

SORTBY関数/事例3:列の見出しの並び順も変更する

SORTBY関数の中にSORTBY関数を挿入することで、縦方向と横方向を同時に並べ替えすることができます。

例えば、下の表の「性別」列を昇順に「体重」列を降順に並べ替えし、さらに列の並びを「氏名⇒性別⇒体重」から「性別⇒体重⇒氏名」に変更するといった場合です。

SORTBY関数で列の並びも並べ替え
SORTBY関数で列の並びも並べ替え

それでは、数式の作成方法を手順に沿って解説します。

まず、空いているセルに並べ替え後の見出し列を作成します。次に、縦方向に並べ替えするため、SORTBY関数を作成します。

=SORTBY(B3:D11,C3:C11,1,D3:D11,-1)

SORTBY関数で縦方向に並べ替え
SORTBY関数で縦方向に並べ替え

次に、元データの見出しの上に、並べ替えしたい列の順番を数字で1,2,3・・と入力します。

列見出しの上に並び順を入力
列見出しの上に並び順を入力

最初に作成したSORTBY関数を囲うように、2つ目のSORTBY関数を囲います。

2つ目のSORTBY関数の第1引数は「1つ目のSORTBY関数」、第2引数は「見出しの上の数値のセル範囲」、第3引数は「1」を入力します。

=SORTBY(SORTBY(B3:D11,C3:C11,1,D3:D11,-1),B1:D1,1)

SORTBY関数で列と行の並びを同時に変更
SORTBY関数で列と行の並びを同時に変更

そうすると、上の表のように、列と行の並びを同時に変更することが出来ます。

-Excel(エクセル), 数式・関数