Excel2021で追加された SORT関数なんですが、Googleスプレッドシートの SORT関数とは微妙に仕様が異なります。それどころか同じ Excelなのに、後で追加された GROUPBY関数や PIVOTBY関数の並べ替えの指定方法とも仕様が違います。実のところ、パワークエリの昇順/降順の指定方法とも異なります。
自分でもどうだったか分からなくなる時があるので、今回は細かい説明は抜きにして、昇順/降順の指定方法だけを取り上げてみました。最後にひとまとめにしていますので、細かい説明がいらない方は、最下行へ移動してください。
最初に基本についてです。昇順・降順とは何か説明しておきます。
- 昇順:値を小さい方から大きい方へ並べる順
- 降順:値を大きい方から小さい方へ並べる順
下から上に昇るのが昇順、上から下に降りるのか降順なので、階段をイメージするといいですね。
昇順・降順の説明はここまでにして、実際の並べ替えの指定方法の説明に入ります。
まずは Excelの SORT関数の場合です。
並べ替え指定方法:「昇順(1)/降順(-1)」=SORT(配列, [並べ替えインデックス], [並べ替え順序], [並べ替え基準])
並び順を指定したい場合は、第二・第三引数に値を入れます。実際の事例で考えてみましょう。
2列目を「昇順」にしたい時:=SORT(テーブル1,2,1)
2列目を「降順」にしたい時:=SORT(テーブル1,2,-1)
複数の列に並び順を指定する場合は、配列定数を入れる(もしくはセルを参照する)ことで、それぞれの列の並び順を指定できます。
1列目を「昇順」、2列目を「降順」で指定する場合=SORT(テーブル1,{1,2},{1,-1})
いらないかもしれませんが、SORTBY関数で指定する場合も書いておきます。
1列目を「昇順」、2列目を「降順」で指定する場合=SORTBY(テーブル1,テーブル1[列1],1,テーブル1[列2],-1)
配列定数は使えませんが、昇順降順の指定に使う値に違いはありません。
続いて、Googleスプレッドシートの SORT関数の場合です。
並べ替え指定方法:昇順(TRUE/0以外の数値)/降順(FALSE/0)」=SORT(範囲, 並べ替える列, 昇順, [並べ替える列2, ...], [昇順2, ...])
単一の列を指定する場合は、特に Excelと変わりません。第一引数以外は省略できますが、省略した場合に左端列昇順のソート(並べ替え)になる点も同じです。
2列目を「昇順」にしたい時:=SORT(テーブル1,2,1)
2列目を「降順」にしたい時:=SORT(テーブル1,2,0)
複数の列に並び順を指定する場合は、配列定数を入れる(もしくはセルを参照する)ことで、それぞれの列の並び順を指定できます。
1列目を「昇順」、2列目を「降順」で指定する場合=SORT(テーブル1,1,TRUE,2,FALSE)
こんな感じです。もちろん「1」「0」で指定しても問題ありません。
この SORT関数の指定方法ですが、Excelに最近追加された GROUPBY・PIVOTBY関数ではまた違う設定方法になります。SORT関数では「列のインデックス番号」と「昇順/降順の番号」を別々に書きますが、これらの関数では2つをまとめて設定できます。
PIVOTBY関数は引数が 11個(GROUPBY関数でも 8個)あるので、細かい説明は省きます。多分、実際の事例で見たほうが早いです。
結果の1列目を「昇順」、2列目を「降順」で指定する場合=GROUPBY(テーブル1[[列1]:[列2]],テーブル1[列3],SUM,0,0,{1,-2})
このように、GROUPBY/PIVOTBY関数の引数「sort_order」では「1列目を昇順」と指定する場合は「1」、「2列目を降順」と指定する場合は「-2」のように、列のインデックス番号の正負を切り替えることで並び順を指定できます。後発の関数だけに、ある意味洗練されていますね。
以上の結果をまとめると、このようになります。
- SORT・SORTBY関数:昇順(1)/降順(-1)
- GROUPBY・PIVOTBY関数:昇順(正の列番)/降順(負の列番)
- 複数列を設定する時は配列定数で指定
- Order:昇順(0/Order.Ascending)/降順(1/Order.Descending)
本当にややこしいですね。