Microsoft 365 の Excel で利用できる SORT 関数について紹介します。
(SORT 関数は Excel 2016 や Excel 2019 では利用できないのでご注意を)

下図のセル G2 に数式を作成し、左側にある「出荷履歴」テーブルのデータを並べ替えた結果を表示します。青い見出しの部分はなくてもよいのですが、見やすいかなと思って用意しておきました。

SORT 関数はスピルありきの関数なので、スピルって?という方は こちら を参照してください。

SORT 関数について

SORT 関数を使うと、いわゆる表 (範囲、配列) のデータを並べ替えた結果を、元の表とは別の場所に表示できます。

もちろん、こちら でご紹介した FILTER 関数で抽出した結果を SORT 関数で並べ替える、なんていう使い方もあるでしょう。

SORT 関数の構文です。ヘルプの記載とは表現を変えてあります。

=SORT(対象データの範囲 , [キー] [順序] [並べ替えの方向])

対象データの範囲 (必須):並べ替えたいデータが含まれる範囲、または配列を指定します。

[キー] (省略可能):並べ替えの基準となる列 (行) を示す数値を指定します。省略すると 1 列 (行) 目がキー列となります。

[順序] (省略可能):昇順で並べ替える場合は 1、降順の場合は -1 を指定します。省略すると昇順で並べ替えられます。

[並べ替えの方向] (省略可能):行で並べ替える (縦方向に伸びる表、セル範囲) の場合は FALSE、列 (横方向に伸びる表、セル範囲) で並べ替える場合は TRUE を指定します。省略すると行で並べ替えられます。

下図の「出荷履歴」テーブルのデータ部分を対象データの範囲とし、[日付] 列 (左から 2 つ目の列) をキーとして、昇順で並べ替えています。方向は、縦方向に伸びる表なので FALSE とします。

よってセル G2 に作成している数式は、=SORT(出荷履歴 2 , 1 , FALSE) です。

このとき、対象データの範囲には [No] や [日付] などの見出し部分のセルを含めません。含めた場合、見出しもデータと同等に扱われて並べ替えの結果に含まれます。

日付がシリアル値で表示された場合は、適切な表示形式を適用してください。

[担当者] 列 (左から 3 列目) をキーにした場合

[担当者] 列には、漢字の文字列がフリガナ情報をもった状態で格納されています。

下図の数式では、[担当者] 列 (左から 3 列目) をキーとして昇順で並べ替えています。

このとき、担当者の「上杉」や「毛利」などの文字列は、文字コード順で並べ替えられます。フリガナ情報がセルに含まれていたとしても、フリガナを使用して並べ替えが行われるわけではありません。(もし、フリガナを使用していたら「浅井」が一番上にくるはず)

[地域] 列 (左から 4 列目) をキーにした場合

下図の数式では、[地域] 列 (左から 4 列目) をキーとして昇順で並べ替えています。

[数量] 列 (左から 5 列目) をキーにした場合

下図の数式では、[数量] 列 (左から 5 列目) をキーとして昇順で並べ替えています。

もし、数値の大きい順に並べ替えたいのであれば、降順ということなので 3 つ目の引数を「1」ではなく、「-1」とします。

おまけ

[日付] 列の昇順で、同じ日付の場合は [数量] 列の降順で並べ替えたい、という複数のキーを指定したい場合は、SORTBY 関数で対応するか、SORT 関数をネストした数式で対応できます。

いわゆる普通の並べ替えのときのことを考えてください。

1 列ずつ並べ替えをするときには、最も優先度の高い並べ替えを最後に実行しますよね。

今回の場合で考えると、優先度は ↓ のようになるので、先に [数量] をキーにした並べ替えをしてから、[日付] をキーにした並べ替えをします。

優先度 1:[日付] 列
優先度 2:[数量] 列

SORT 関数の数式もこれと同じ考え方で、最も優先度の高い並べ替えを一番外側の処理としてネストします。

セル G2 に入っている数式はこちら。内側の SORT 関数の処理が「出荷履歴」テーブルの [数量] 列を降順で並べ替えるための処理、外側の SORT 関数の処理が、内側の処理結果を [日付] の昇順で並べ替えるための処理です。

=SORT(SORT(出荷履歴,5,-1,FALSE),2,1,FALSE)


横方向 (列) の並べ替えを行う機会は、縦方向 (行) の並べ替えを行うほどの頻度がないと思うので書きませんでしたが、横方向に並ぶデータの順序を並べ替えるときにも SORT 関数で対応できます。

なお、並べ替えたい!と思っている範囲が 1 列しかないのであれば、=SORT(範囲) だけで昇順に並べ替えた結果が得られるので、キーとする列の指定や昇順 / 降順の指定、方向の指定はせずとも同じ結果が得られます。

また、途中でも書きましたが =SORT(FILTER 関数による処理) のように、ほかの関数と組み合わせて使うのが当たり前になるような気がします。なんだかんだで、自分の作業の過程では FILTER 関数や UNIQUE 関数との組み合わせで使うことが多い気がします。

石田 かのこ