12/30/2020

Excel。VBAでの並び替えは条件を設定してから実行させる2段階方式です。【SORT】

Excel。VBAでの並び替えは条件を設定してから実行させる2段階方式です。

<Excel VBA>

大量のデータから集計や抽出したあとに、例えば、売上高を降順で並び替えや、顧客名のフリガナを五十音順で並び替えを行いたいケースは結構あります。


Excel VBAで集計や抽出をしたら、ついでに並び替えも行いたいわけですね。

ところが、Excel VBAで並び替えを行う場合、ちょっとした特徴があります。


それが、並び替えの条件などを設定してから、並び替えを実行します。

つまり、「2段階方式」です。


次のデータを用意しました。


今回は、このデータのC列にある「売上高」を降順で並び替えるExcel VBAを作っていきます。


プログラム文はこのような感じです。


Sub 並び替え()

    With ActiveSheet.Sort.SortFields

        .Clear

        .Add Key:=Range("c2"), _

            SortOn:=xlSortOnValues, _

            Order:=xlDescending, _

            DataOption:=xlSortNormal

    End With

    

    With ActiveSheet.Sort

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Orientation = xlTopToBottom

        .Apply

    End With

End Sub


説明は後ほどとして、まずは実行して確認してみましょう。


ご覧のように、売上高を降順で並び替えすることができました。


では、プログラム文を確認していきましょう。


上部ブロックの「SortFieldsオブジェクト」が並び替えの条件などを設定するところです。

With ActiveSheet.Sort.SortFields

    .Clear

    .Add Key:=Range("c2"), _

         SortOn:=xlSortOnValues, _

         Order:=xlDescending, _

         DataOption:=xlSortNormal

End With


「ActiveSheet.Sort.SortFields」を毎回入力するのは面倒なので、With ~ End With文を使用しています。

.Clearは、並び替えの条件が「SortFieldsオブジェクト」に残っているといけないので、並び替えの条件をクリアします。


.Add Key:=Range("c2")は、並び替えの基準となる列を指定します。

今回はC列の売上高が基準となります。


SortOn:=xlSortOnValuesの「SortOn」は並び替えの基準を指定します。

今回は、セルの値で並び替えるので、「xlSortOnValues」を設定します。


なお、SortOnですが、

xlSortOnCellColorがセルの背景色

xlSortOnFontColorがセルの文字の色

xlSortOnIconが条件付き書式のアイコン

というように、並び替えの条件を指定することもできます。


Order:=xlDescendingは、並び替えを昇順か降順か設定するところで、「xlDescending」なので降順という条件を設定しました。


DataOption:=xlSortNormalは、標準の並び替え基準という意味です。


要するに、「以前あった条件をクリアしてから、C列の値を基準に降順で並び替える」という条件を設定したわけです。


なので、まだ実行していません。


下部ブロックでは、上部ブロックで設定した条件に従い、並び替えを実行します。

    With ActiveSheet.Sort

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Orientation = xlTopToBottom

        .Apply

    End With


.SetRange Range("a1").CurrentRegionは、並び替えの対象範囲を設定します。

今回は、A1から連続する範囲(CurrentRegion)としています。


.Header = xlYesは、先頭行がヘッダー。

つまり見出し行かどうかということを聞いています。

「xlYes」は、先頭行が見出し行なので、それ以降のデータが並び替えの対象ということです。


.Orientation = xlTopToBottomは、上から下に向かって並び替えを実行するという意味です。


.Applyは、「実行」という意味ですね。


このように、並び替えをExcel VBAで設定する場合は、2段階方式です。

このようなプログラム文を保存しておいて、コピペして使いまわすと、一から入力しない済むので楽かもしれませんね。