(Excel)指定した順序で並べ替える方法

 Excelで、独自のソート順(並べ替えの順序)で並べ替えを行う方法についてです。
 関数を使う方法とメニュー操作による方法を紹介します。

SORTBY関数による方法

 次の画像ではF3セルに「=SORTBY(B3:D9,C3:C9)」と入力しています。
 つまり左側の表内のデータを、C列の値(所属)を基準として昇順で並べ替えた結果を得ています。
 しかし文字列のソート順は(昇順や降順とは異なる)独自の順序が求められることが多く、このケースでも「本店」が最も上に来るようにしたいものの、これでは昇順でも降順でもうまくいきません。

 


 そこで次の画像では、XMATCH関数を組み合わせて次のような式にすることで解決しています。

 F3セル

=SORTBY(B3:D9,XMATCH(C3:C9,{"本店","所沢店","和光店"}))

 まずソート順(並べ替えの順序)を決めて配列状に記し、それをXMATCH関数の第2引数(検索範囲)とします。
 これでC列の値が1,2,3という数値に変換されるので、それに沿って並べ替えればよいというわけです。
 なお、この配列に含まれない値は含まれる値より下に並び、あとは初出順で順番が決まります(別途ソートされないので注意)。降順(第3引数=-1)にすると配列に含まれる値よりも上に並びます。



 こちらはソート順をセルに入力して数式から参照するようにした例です。
 結果はまったく同じです。

 H3セル

=SORTBY(B3:D9,XMATCH(C3:C9,F3:F5))

 


 本題とは直接関係ありませんが、次の画像では生年月日(昇順)を第2の基準(ソートキー)として設定しています。

 H3セル

=SORTBY(B3:D9,XMATCH(C3:C9,F3:F5),,D3:D9,)

 昇順/降順の指定をしていません(既定値が1なので昇順となります)が最後のカンマは必要で、これがないと引数が足りないとの警告が出ます。
 上記例のようにソートキーが1つの場合は最後にカンマを付けなくても済みますが、2つ以上だと必要になります。

「並べ替え」メニュー(ユーザー設定リスト)による方法

 メニュー操作で実現する方法です。
 まずは表を選択し、「データ」タブにある「並べ替え」をクリックします。
 表を選択するときに表内の1セルだけ選択した状態でも自動的に表全体を選択してくれますが、全体を選択した方が無難です(理由は後述)。

 


 ダイアログが現れます。
 ここで右上の「先頭行をデータの見出しとして使用する」にチェックが入っていなかったら入れてください。
 そして左側のプルダウンから「所属」を選択し、右側のプルダウンから「ユーザー設定リスト」を選択します。

 なお、表内の1セルだけ選択した状態で「並べ替え」メニューをクリックしても自動的に表全体が選択されますが、このダイアログが開いたときに「先頭行をデータの見出しとして使用する」のチェックが入っていないと見出しより上の範囲まで選択してしまうことがあります。そこからチェックを入れると今度は選択範囲の左側のダイアログの選択肢がおかしくなったりします。よって表全体を選択しておいた方が確実です。
 


 次のダイアログが現れます。
 左側にある「新しいリスト」を選択した状態で、中央部にあるボックスにソート順を示すリストを記入します(Enterキーで次の行、つまり次の項目に移動)。
 そして「追加」ボタンをクリックします(直ちに適用したい場合は「追加」をクリックせずOKボタンをクリックしても設定を進められます)。

 


 「追加」をクリックした様子です。独自のソート順が新しいリストとして追加されました。
 あとはOKボタン(及び最初のダイアログのOKボタン)をクリックすれば完了です。

 


 リストの順番通りに並べ替えが行われました。
 なお、リストに含まれない値は含まれる値よりも下に並びます(初出順ではなく別途ソートされます)。