Excel。マクロ023。オリジナルの基準で並び替えを実施したい
<Excel VBA>
次の表があります。この表を担当順に並び替えを行いたいのですが、
池辺,大崎,品川,渋谷の順に並び替えを行いたいとします。
まずは、Excelの機能である昇順の並び替えを実行してみましょう。
B1をクリックして、データタブの昇順をクリックすると、
次のように並び替えを行いました。
並び変わったのですが、順番が、渋谷,大崎,池部,品川の順になっていますね。
今回は、池辺,大崎,品川,渋谷の順にしたいのですが、
なっていないわけでして、このような場合、Excelの機能だけで行うとしたら、
Excelのオプションにある、
詳細設定の「ユーザー設定リストの編集」に追加することで、
オリジナルの並び替えを行うことはできますよね。
しかし、いちいち登録するのも大変ですね。
そこで、Excel VBAを使ってみると、非常に短い構文で作ることができます。
Sub オリジナル並び替え()
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("b1"), CustomOrder:="池辺,大崎,品川,渋谷"
.SetRange Range("a1").CurrentRegion
.Header = xlYes
.Apply
End With
End Sub
Withステートメントを使っていますが、
これで、池辺,大崎,品川,渋谷の順で並び替えを行うことができます。
まずは、実行してみましょう。
このように、並び替えを行うことができましたね。
では、構文を確認しておきましょう。
With ActiveSheet.Sort
アクティブシートの並び替えに関する処理を記述するという意味ですね。
End With
で、Withステートメントを終了しますので、忘れずに記述しましょう。
.SortFields.Clear
並び替えが実施されているかもしれないので、一度並び替えの条件をクリアーしておきます。
.SortFields.Add Key:=Range("b1"), CustomOrder:="池辺,大崎,品川,渋谷"
Key:=Range("b1") B1をキーとして、
CustomOrder オリジナルの"池辺,大崎,品川,渋谷"という順番を
指定してあげます。
.SetRange Range("a1").CurrentRegion
A1を含む表全体を並び替えの範囲とします。
.Header = xlYes
見出し行。すなわち1行目を見出し行としますか?ということなので、xlYes。
つまり、1行目を見出し行としますので、並び替えに混ぜないようにします。
.Apply
並び替えを実行するという意味ですね。
このようにすれば、
ユーザー設定リストの編集を加筆修正する必要はありませんね。
ついでに、NOフィールドを昇順で並び替えをして
最初の状態にするマクロを作ってみましょう。
Sub ナンバー並び替え()
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("a1"), SortOn:=xlSortOnValues, Order:=xlAscending
.SetRange Range("a1").CurrentRegion
.Header = xlYes
.Apply
End With
End Sub
実行してみると、最初の状態に戻りましたね。
大きく変わったのは、次の一文だけですね。
.SortFields.Add Key:=Range("a1"), SortOn:=xlSortOnValues, Order:=xlAscending
説明をすると、
SortOn:=xlSortOnValues
SortOnで、並び替えのキーをxlSortOnValues。
値で並び替えをするように指示をしております。
Order:=xlAscending
xlAscendingは、昇順のことですね。降順は、xlDescendingを使います。
あとは、ほぼ同じですね。
このように、Excel VBAを使った並び替えも
比較的簡単に作ることができますので、
知っておくといいのかもしれませんね。