2/28/2018

Excel。マクロ023。オリジナルの基準で並び替えを実施したい【Sort】

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を使った並び替えも
比較的簡単に作ることができますので、
知っておくといいのかもしれませんね。