更新日:、 作成日:

エクセル SORTBY 関数:セルの範囲をキーを指定して並べ替えする

はじめに

エクセルの SORTBY 関数の使い方を紹介します。

SORTBY 関数はセルの範囲や配列をキーを指定して並べ替えた配列を取得します。

=SORTBY(A1:B3,A1:A3,1) のようにして、セルの範囲を列「A」を元に昇順で並べ替えできます。

=SORTBY(A1:B3,A1:A3,-1) のようにして、セルの範囲を列「A」を元に降順で並べ替えできます。

=SORTBY(A1:C2,A1:C1,1) のようにして、セルの範囲を行「1」を元に昇順で並べ替えできます。

=SORT(A1:B3,C1:C3,1,D1:D3,-1) のようにして、セルの範囲を列「C」の昇順で並べ替えし、同じ値のときは列「D」の降順で並べ替えできます。

取得する範囲とは別に並べ替える範囲を指定して並べ替えできます。

配列を並べ替えるには「SORT 関数」を使用します。
並べ替えをする方法は「並び替えをする」をご覧ください。
この関数は 365 または 2021 から使用できます。

SORTBY 関数の引数

SORTBY(結果範囲, 基準範囲1)
基準範囲を元に行単位で昇順に並べ替えし、それに対応して並べ替えた結果範囲の配列を取得します。
基準範囲を元に列単位で昇順に並べ替えし、それに対応して並べ替えた結果範囲の配列を取得します。

SORTBY(結果範囲, 基準範囲1, 順序1, 基準範囲2, 順序2 …)
基準範囲で並べ替えた時に同じ値があるときは、その値を次の基準範囲を元に並べ替えできます。順序で降順に並べ替えるように指定できます。

引数「結果範囲」セルの範囲や配列を指定します。
引数「基準範囲」並べ替えの元となるデータの範囲を 1 行または 1 列で指定します。
1 列なら、引数「結果範囲」を行単位に並べ替えをします。
1 行なら、引数「結果範囲」を列単位に並べ替えをします。
引数「順序」省略できます。
1 または省略:引数「基準範囲」を昇順で並べ替えをします。
-1:引数「基準範囲」を降順で並べ替えをします。
スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

結果が最初から配列のため、セルの範囲や配列を指定してもその通りにはスピルされません。

使い方

SORTBY 関数の使い方を紹介します。

結果は配列になり複数のセルに表示されます。これはスピルという機能によるものです。詳しくは「スピル、動的配列数式の使い方」をご覧ください。

行単位で昇順に並べ替えする

個数を元に行単位で昇順に並べ替えして、名前と個数を取得します。

=SORTBY(B3:C6,C3:C6)
=SORTBY(B3:C6,C3:C6,1)
2

個数を元に行単位で昇順に並べ替えして、名前を取得します。

=SORTBY(B3:B6,C3:C6)
1

行単位で降順に並べ替えする

個数を元に行単位で降順に並べ替えして、名前と個数を取得します。

=SORTBY(B3:C6,C3:C6,-1)
3

列単位で昇順に並べ替えする

個数を元に列単位で昇順に並べ替えして、名前と個数を取得します。

=SORTBY(C2:F3,C3:F3)
4

複数の列で並べ替えする

名前に同じ値があるときに個数で並べ替えします。

=SORTBY(B3:D6,B3:B6,1,C3:C6,1)
=SORTBY(B3:D6,B3:B6,1)

名前だけで並べ替えると、それ以外の順番は必ず出現した順になります。名前が A のとき、値が 1, 3 の順に出現します。名前を昇順でも降順に並べ替えても必ず 1, 3 の順に並べ替えられます。

10

日付を並べ替えする

日付を並べ替えします。

=SORTBY(B3:C6,B3:B6)

結果が数値になっているのは日付の実際の値が数値だからです。セルの書式設定を指定して日付形式に表示できます。

8

文字列を並べ替えする

数値や日付、文字列など混在した値を並べ替えします。

=SORTBY(B4:D23,B4:B23)

数値をその値の順番に並べ替えした後に、その他を文字列として左側の文字から 1 文字ずつ次の順で並べ替えます。

数値空白記号英字 (アルファベット) 大文字小文字カタカナひらがな絵文字漢字漢字 (Unicode)空のセル

11

高度な使い方

SORTBY 関数と他の関数を組み合わせた使い方などを紹介します。

抽出した結果を並び替えする

値が 30 以上の行を抽出して、値の降順で並び替えをします。「FILTER 関数」を使用して条件に一致した行を抽出できます。

=LET(
結果範囲,B3:D7,
条件,D3:D7>=30,
SORTBY(FILTER(結果範囲,条件),FILTER(D3:D7,条件),-1))

引数「結果範囲」と引数「基準範囲」の行数を合わせる必要があります。そのため、引数「結果範囲」と同じ条件を引数「基準範囲」にも入力して並べ替える列を指定します。

12

ランダムに並べ替えする

ランダムに並べ替えたいときは引数「基準範囲」に「RANDARRAY 関数」を入力します。

=SORTBY(B3:B6,RANDARRAY(4))
6

セルが再計算されるたびに更新されます。固定するには =SORTBY(…,RANDARRAY(…)) を入力してから F9 キーで確定します。数式が値に変換され固定できます。

上記では RANDARRAY(4) と行数を固定で入力しています。それをセルの範囲の数にするには「COUNTA 関数」を使用します。

=LET(
範囲,B3:B6,
SORTBY(範囲,RANDARRAY(COUNTA(範囲))))

解説

引数「基準範囲」を並べ替えし、それと同じように引数「結果範囲」を並べ替えた結果を配列で取得します。

引数「基準範囲」が 1 列のとき、引数「結果範囲」を行単位に並べ替えます。

引数「基準範囲」が 1 行のとき、引数「結果範囲」を列単位に並べ替えます。

引数「基準範囲」と引数「結果範囲」の行数または列数が一致していないときはエラー #VALUE! になります。

引数「基準範囲」が複数の行列のときはエラー #VALUE! になります。

引数「基準範囲」が 1 行なら、その後の引数「基準範囲」も 1 行にします。列についても同様です。そうでないときはエラー #VALUE! になります。

引数「順序」の昇順とは小さい順です。1, 2, 3 … 。降順とは大きい順です。3, 2, 1 …

引数「順序1」は省略できますが、引数「順序2」以降は省略できません。

SORTBY と SORT の違い

SORTBY 関数と「SORT 関数」の違いは、主に並べ替える対象にあります。

  • SORTBY 関数:主にセルの範囲を並べ替えします。取得する範囲と並べ替える範囲を別に指定できます。
  • SORT 関数:主に配列を並べ替えします。「FILTER 関数」などから取得した配列を並べ替えます。並べ替える範囲をそのまま取得します。

文字列の順番

ABCADE を並べ替えるときは、左側の文字から 1 文字ずつ比較します。

1 回目に AA を比較して同じなので次の文字を比較します。

2 回目に BD を比較して B が小さいので、その順に並べ替えます。

それぞれの文字の大小は、上記の「文字列を並べ替えする」の順番どおりです。漢字については「CODE 関数」で取得できる漢字 → UNICODE 専用文字の順になります。それらの範囲内では「UNICODE 関数」の値の順番です。