SORT 関数 / SORTBY 関数


ここで解説する SORT関数 と SORTBY関数 は、Office InsiderのProPlusに追加された関数です。執筆時点(2019年8月)で、製品版のExcelにはまだ実装されていません。ただし、Microsoftがこの関数を実装すると公にアナウンスしたのは、2018年の11月です。おそらく現在は、さまざまな動作検証をしたり、細かい修正などを行っているところでしょうけど、近い将来Excelに実装されるのは間違いありません。そうなったら、もうExcelの使い方が大きく変わります。そんな画期的な関数です。なお、Office Insiderに関しては、ご自身でググってください。また、この関数では「スピル」という機能が使われています。スピルに関しては「Excel 2016レビュー[Excelの使い方が激変する「スピル」]」をご覧ください。

SORT関数

指定した範囲を並べ替える関数です。上記が、正式な引数名ですけど、次のように考えると分かりやすいです。

引数「範囲」には、並べ替える元のセル範囲を指定します。引数を見て分かるように「1行目を先頭行として、並べ替えから除外するか」という設定はありません。したがって、引数「範囲」に指定したセル範囲は、1行目も並べ替えられます。つまり「範囲」にはタイトル行を含めてはいけないということです。

引数「キー」には、"何列目を基準に並べ替えるか"の列位置を数値で指定します。範囲の左端列が1です。列文字のABCや、セルを表すA1などは指定できません。引数「キー」を省略すると、範囲の1列目を基準にして並べ替えます。指定できる「キー」はひとつだけです。複数の「キー」に優先順位をつけて並べ替えるときは、後述のSORTBY関数を使います。

引数「順序」には、"昇順"か"降順"かを指定します。"昇順"で並べ替えるときは1を指定し、"降順"で並べ替えるときは-1を指定します。引数「順序」を省略すると、"昇順"の1が指定されたものとみなされます。

引数「方向」は、並べ替えの方向を指定します。一般的な表では"行"を並べ替えますが、"列"を並べ替えることもできます。行方向に並べ替えるときはFALSEを指定し、列方向に並べ替えるときはTRUEを指定します。引数「方向」を省略するとFALSEが指定されたものとみなされて、一般的な行方向での並べ替えが行われます。列方向に並べ替えるときは、引数「キー」に、上から何行目を基準にするかの数値を指定します。

簡単なケースで、やってみましょう。

上図のような表を、"1列目"を"昇順"で並べ替えてみます。なお、並べ替える元のデータはテーブル形式にしています。名前は「テーブル1」です。

あるいは、今回のように"1列目"を"昇順"で"行方向"に並べ替えるのであれば、引数「キー」「順序」「方向」は省略できます。

列方向に並べ替える

あまり一般的ではありませんが、列方向に並べ替えるケースもお見せしましょう。

上の表を、下のように"4行目"の利益を"降順"で並べ替えます。

フリガナには対応しない

漢字を並べ替えるときには注意が必要です。SORT関数は、フリガナに対応していません

A列のセルにはフリガナが設定されていますが、文字コード順で並べ替えが行われます。

フリガナを使って、あいうえお順に並べ替えたいのでしたら、PHONETIC関数などを使ってフリガナ情報を取り出してください。

複数のキーで並べ替える

SORT関数は、1つのキーしか指定できません。複数のキーに対して、優先順位をつけて並べ替えるときは、後述するSORTBY関数を使います。ただし、1つのキーしか指定できないSORT関数でも、複数回実行することで、複数のキーを基準にした並べ替えが可能です。

上図の表を、
第1優先順位 → 2列目「記号」
第2優先順位 → 3列目「数値」
で、並べ替えてみます。こういうときは、優先順位の低い方から先に並べ替えを行います。

優先順位の高い2列目「記号」で並べ替えが行われ、なおかつ3列目の「数値」も昇順に並んでいます。

どんなときに便利か

並べ替えって、どんなときに使うのでしょうか。並べ替えて終わり、というのでしたら、このSORT関数を普通に使えばいいです。ちなみに「Excel 2016レビュー[Excelの使い方が激変する「スピル」]」で、SORT関数とFILTER関数を組み合わせた例を紹介しています。ほかにも、並べ替えた後で、さらにその並べ替えたデータを何かの処理に使うのって、どんなケースだろうと考えたのですけど、なかなか良い例が思い浮かびません。なので、ここでは「入力規則のリストに、並べ替えた順番で表示する」ケースをご紹介します。これはこれで、けっこう質問が多いです。

上図のような元データを使って、

このように、並べ替えられたリストを作ります。

まずは、これ、入力規則の設定にSORT関数を直接指定はできませんでした。かなりあれこれと(裏技も含めて)試してみたのですけど、どうやらダメっぽいです。入力規則のリストって、テーブルともイマイチ相性が悪いし、どうも"仲間ハズレ感"が否めません。そこで、まずはセルにSORT関数を入力します。なお、元データは「テーブル3」です。

ここまでいけば、あとはこの結果を入力規則で設定すればいいのですけど、SORT関数の結果が何件あるかは分かりません。なので、次のように指定します。

[元の値]に指定した「=C2#」の「#」は、スピル範囲演算子です。詳しくは「Excel 2016レビュー[Excelの使い方が激変する「スピル」]」をご覧ください。

これで完成です。元のリストに、新しいデータを追加してみましょう。

一度セルにSORT関数を入れるというのが、ちょっと許せませんけど、まぁヨシとしましょう。ちなみにSORT関数は、VBAからWorksheetFunctionで呼び出せます。

SORTBY関数

複数のキーを同時に指定して並べ替えを行える関数です。

これも、引数を分かりやすく表現してみます。

SORT関数は「何列目を基準に」並べ替えるかを指定しましたが、SORTBY関数は「どの範囲を基準に」するかを指定します。SORT関数では基準となる列を数値で指定しましたが、SORTBY関数はセル範囲を指定します。

う~ん...実務ではあまり使われなさそうな気がします。個人的な感想ですが、実務で行う並べ替えって、多くの列を、一度の並べ替えで、同時に指定することって、あまりないのではないかと思います。だって、本当にそれで正しい優先順位によって並べ変わっているかどうか、パッと見わからないじゃないですか。なので、一般的には1つの列だけで並べ替えることが多いのではないかと。だったらSORT関数の方が分かりやすいし、使いやすいです。上記のように、SORT関数をネストすれば、複数の列を基準にすることもできますしね。まぁ、SORTBY関数にはそれなりに便利な使い方があるかもしれませんけど、今は思いつきません。それどころか「これって、あまり使われねーんじゃね感」が強いです(笑)。ちなみに、私のこのカン、昔からけっこう当たります(爆)。