範囲または配列の値に基づいて並べ替えます。
できないこともあります。
=SORT(配列,[並べ替えインデックス],[並べ替え順序],[並べ替え基準])
配列
必須です。
並べ替え処理する元データを指定します。
セル範囲または配列です。
並べ替えインデックス
省略可能。
並べ替えのキーを指定します。
何列目(または何行目)を基準に並べ替えるかを
数値で指定します。
範囲の左端列が1(または上端行が1)です。
この引数を省略すると、範囲の1列目(1行目)を
基準として並べ替えます。
この引数は1つしか指定できません、つまり並べ替えに
指定できるキーは1つだけです。
上記説明における何列目または何行目の違い
並べ替え順序
省略可能。
並べ替えの順序、「昇順」か「降順」を指定します。
1 : 昇順
-1 : 降順
この引数を省略すると、1(昇順)で並べ替えられます。
並べ替え基準
省略可能。
並べ替えを行方向に行うか列方向に行うかを指定します。
TRUE : 列で並べ替え ・・・ 横に並べ替える
FALSE : 行で並べ替え ・・・ 縦に並べ替える
この引数を省略するとFALSE(行で並べ替え)で並べ替えられます。
TRUE,FALSEは、1,0で指定しても構いません。
行・列の表現が分かりづらいので、間違えないようにしてください。
一般的なデータ(横に項目、縦にデータ)では、
FALSE(行で並べ替え)になります。
=SORTBY(配列,基準配列,[並べ替え順序],...)
配列
必須です。
並べ替え処理する元データを指定します。
セル範囲または配列です。
基準配列
必須です。
並べ替えのキーとして使うセル範囲または配列を指定します。
セル範囲または配列で指定します。
この基準配列の配列の向きによって、並べ替えの向きが決定されます。
行方向(縦方向)の配列を指定した場合は行方向(縦方向)に並べ替えます。
列方向(横方向)の配列を指定した場合は列方向(横方向)に並べ替えます。
この基準配列は、元データ範囲内にある必要はありません。
元データ範囲とは全く別のセル範囲または配列を指定できます。
行方向(縦方向)で並べ替える場合は、元データの行数と一致した縦の配列を指定します。
列方向(横方向)で並べ替える場合は、元データの列数と一致した横の配列を指定します。
並べ替え順序
省略可能。
並べ替えの順序、「昇順」か「降順」を指定します。
1 : 昇順
-1 : 降順
この引数を省略すると、1(昇順)で並べ替えられます。
SORT関数、SORTBY関数と、ワークシートの並べ替えの違い
ワークシートの並べ替えは、指定範囲のデータを並べ替えてしまいますが、
SORT関数SORTBY関数は、指定範囲のデータを並べ替えて
別のセル範囲に出力します。
ワークシートの並べ替えでは、元表のデータをそのままにしておきたい
場合は表範囲をコピーしてから行う必要があります。
しかし、これらの関数を使用すれば、このコピーが不必要になります。
ただし関数では、ワークシートの並べ替えにある以下の指定はできません。
・先頭行を見出しとして使用する。
・大文字と小文字を区別する
・ふりがなを使う
つまり、SORT関数、SORTBY関数では、
・全てデータ行として扱われる
・大文字と小文字を区別しない
・ふりがなを使わない
したがって、このような並べ替えが必要な場合は、
今まで通りワークシートで並べ替えを行う必要があります。
最も単純な並べ替え
並べ替え対象内の指定列で並べ替えるだけならSORT関数が簡単です。
SORT関数
=SORT(A2:E51)
※「適当に作った個人情報」です。
1列目(A列)をキーとして行方向に昇順で並べ替えしています。
[並べ替えインデックス],[並べ替え順序],[並べ替え基準]
これらを全て省略しています。
省略せずに指定するなら、
=SORT(A2:E51,1,1,FALSE)
SORTBY関数
=SORTBY(A2:E51,A2:A51)
1列目(A列)をキーとして行方向に昇順で並べ替えしています。
[並べ替え順序]
これを省略しています。
省略せずに指定するなら、
=SORTBY(A2:E51,A2:A51,1)
引数において範囲を2度指定しなければならず、このような単純な
並べ替えであればSORT関数を使ったほうが良いでしょう。
複数キーでの並べ替え
キーを連結した作業列を作成しキーとすれば様々な
並べ替えに対応できますが、以下では作業列を作成せずに
並べ替える場合の例になります。
※作業列を使って複数キーを結合して並べ替える事自体は
決して悪いものではありません。
SORT関数で複数キー並べ替え
SORT関数単独ではできませんが、
SORT関数をネストすれば可能です。
都道府県(E列) > 性別(D列) で並べ替えます。
=SORT(SORT(A2:E51,4),5)
注意点としては、関数ネストの内側から順に実行される点になります。
上記では、性別で並べ替えた後に都道府県で並べ替えられます。
つまり、優先度の高い並べ替えを外側の関数で指定します。
場合によっては、このような使い方をすることもあるかもしれませんが、
複数キーの場合はSORTBY関数が便利でしょう。
SORTBY関数で複数キー並べ替え
都道府県(E列) > 性別(D列) で並べ替えます。
=SORTBY(A2:E51,E2:E51,1,D2:D51,1)
並べ替え順序の1は省略できるので、以下でも同じです。
=SORTBY(A2:E51,E2:E51,,D2:D51,)
ただし、最後の,カンマは省略できないので注意してください。
列方向(横方向)で並べ替え
SORT関数で列方向(横方向)並べ替え
3行目の単価で昇順に並べ替えています。
=SORT(B1:F3,3,1,TRUE)
SORTBY関数で列方向(横方向)並べ替え
=SORTBY(B1:F3,B3:F3)
範囲を2度指定しなければならないので、このような場合は
SORT関数を使ったほうが良いでしょう。
しかし、この下で説明しているように、並べ替え範囲外を
指定できるSORTBY関数ならではの使い方があります。
並べ替え範囲(配列)以外の基準で並べ替える
SORT関数は、並べ替え範囲しか並べ替えのキーが指定できませんが、
SORTBY関数は、並べ替え範囲以外をセル範囲または配列で指定できます。
列方向(横方向)を指定順序で並べ替え
=SORTBY(A2:E51,{2,5,1,4,3})
配列定数として、{2,5,1,4,3}これで指定していますが、
もちろんセル範囲でも指定できます。
=SORTBY(A3:E52,A1:E1)
さらに出力先の項目名を利用して、MATCH関数と
組み合わせるとより便利に使えます。
=SORTBY(A2:E51,MATCH(A1:E1,G1:K1,0))
ランダムに並べ替え
=SORTBY(A2:F51,RANDARRAY(ROWS(A2:A51)))
RANDARRAY関数で行数分の乱数を作り、その乱数を基に並べ替えています。
VLOOKUPの結果で並べ替え
都道府県コードを別表から取得し、取得したコードで並べ替えます。
=SORTBY(A2:F51,VLOOKUP(F2:F51,O:P,2,FALSE))
このように、他の関数(特にVLOOKUP系)で取得した順番で
並べ替える方法は、今後は頻繁に使われるようになるかもしれません。
ただし、並べ替え後の結果を見てもそれが
正しいかの確認がかなり困難になります。
可能な限り作業列を作成し、その列に他の関数の結果を出力して、
それを並べ替えのキーとして使うことをお勧めします。
列全体を範囲指定する場合
スピル関数で一番困るのが、列全体を指定しづらい事です。
単純に列全体を指定すると、SORT関数および
SORTBY関数はエラーとなってしまいます。
そこで、FILTER関数でデータが空白以外(<>"")の行だけに絞ってみると、
=SORT(FILTER(A:E,A:A<>""))
一見良さそうですが、見出し行まで並べ替えに入ってしまいます。
上記の場合の解決方法としては、データの入っている行の
判定方法を工夫することで対応できます。
データには、大抵はこのように数値しか入っていない
列が存在するはずなので、この手法は幅広く使えるはずです。
もちろん数値とは限らず、データと見出しを
区別することができる判定ならどのような条件でも構いません。
ただし、
AND関数で複数条件を指定するとエラーとなってしまうので、
単一条件だけで済むようにしてください。
- 関連記事
-
https://pcexa.blog.fc2.com/blog-entry-132.htmlExcel2021の新関数 SORT関数、SORTBY関数
(この一行は、各記事の最後に固定表示するサンプルです。テンプレートを編集して削除もしくは非表示にしてください。)