導入:なぜ「独自順序」の並べ替えが必要なのか
実務において、「昇順」や「降順」といった単純なアルファベットや数値の並び替えでは対応できないケースは非常に多いものです。例えば、「優先度(高・中・低)」や「部署名(営業部、製造部、総務部)」など、業務上の論理的な順番でデータを整理したい場面です。これを知らないと、わざわざ作業列を作って番号を振るという非効率な手間が発生してしまいます。今回は、Excelの標準機能である「ユーザー設定リスト」を活用し、スマートに並べ替える方法を解説します。
基礎知識:ユーザー設定リストとは
Excelには、曜日(月〜日)や月(1月〜12月)のように、あらかじめ決められた順序で並べ替える機能が備わっています。これと同じ仕組みを、自社独自の項目(例:支店名、役職、プロジェクトフェーズなど)に適用できるのが「ユーザー設定リスト」です。一度登録すれば、何度も繰り返し利用できるため、ルーチンワークの効率化に最適です。
実装/解決策:ユーザー設定リストの登録と並べ替え手順
以下の手順で、独自リストを作成し、並べ替えを実行します。
1. リストの登録:
[ファイル]タブ > [オプション] > [詳細設定] > [全般]グループにある[ユーザー設定リストの編集]ボタンをクリックします。
[新しいリスト]を選択し、並べ替えたい順序をカンマ区切り、または改行で入力して[追加]します。
2. 並べ替えの実行:
並べ替えたいデータ範囲を選択し、[データ]タブ > [並べ替え]をクリックします。
[順序]のプルダウンから[ユーザー設定リスト…]を選択し、先ほど作成したリストを選んで[OK]を押すことで、指定した通りの順序で並び変わります。
サンプルプログラム:VBAで自動化する
実務ではこの操作をVBAで自動化することが多々あります。以下のコードは、特定の範囲を「優先度」に基づいて並べ替える例です。
‘ 実行前にあらかじめユーザー設定リストに「高,中,低」が登録されている必要があります
Sub SortByCustomList()
Dim ws As Worksheet
Set ws = ActiveSheet
‘ 既存の並べ替え設定をクリア
ws.Sort.SortFields.Clear
‘ 並べ替えのルールを設定
‘ ユーザー設定リストを使う場合は CustomOrder 引数を指定します
ws.Sort.SortFields.Add Key:=Range(“B2:B10″), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
CustomOrder:=”高,中,低”, _
DataOption:=xlSortNormal
‘ 範囲を指定して並べ替え実行
With ws.Sort
.SetRange Range(“A1:C10”)
.Header = xlYes ‘ 見出しあり
.Apply
End With
MsgBox “並べ替えが完了しました。”
End Sub
応用・注意点:現場で陥りやすい罠
注意点1:リストの表記ゆれ
ユーザー設定リストは完全一致で判定されます。「営業部」と「営業」のように表記が異なると、リスト外として扱われ、一番下に配置されてしまいます。入力規則を使って、ドロップダウンリストから選択させる運用を組み合わせるのが鉄則です。
注意点2:VBAでの指定
VBAで実装する場合、手動設定した「ユーザー設定リストのインデックス番号」に依存すると、PCが変わった際にエラーになることがあります。サンプルコードのように CustomOrder引数で直接文字列を指定する方法が、移植性が高くバグの少ない安全な実装と言えます。ぜひ現場の業務効率化にお役立てください。
