【VBA関係】VBAでExcelのデータを並べ替える(ソートを適用する)|ポテの学習メモ #009

アフィリエイト広告を利用しています。

アイキャッチ画像

次のテーブルを操作する。

本稿で扱うテーブル

「販売金額」の列を降順に並べ替える。コードと、その実行結果は次の通り。なお、テーブルのインデックスは1(ListObject(1))であることが前提。

Sub SortBySalesAmount()


    ' 変数宣言
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim sort_col_idx As Integer

    ' ワークシートを取得
    Set ws = ThisWorkbook.Worksheets(1)

    ' テーブル(ListObject)を取得
    Set tbl = ws.ListObjects(1)

    ' ソート対象列(販売金額列)のインデックスを取得
    sort_col_idx = tbl.ListColumns("販売金額").Index

    ' 販売金額列を基準に降順でソートを適用
    With tbl.Sort
        .SortFields.Clear
        .SortFields.Add Key:=tbl.ListColumns(sort_col_idx).Range, _
                        SortOn:=xlSortOnValues, _
                        Order:=xlDescending, _
                        DataOption:=xlSortNormal
        .Header = xlYes
        .Apply
    End With


End Sub
実行結果
実行結果

意図通りに並べ替えが適用された。

Information

今回はオブジェクトをテーブルにしたが、通常のセル参照でもソートのメソッドは、そのまま使える。

並べ替え処理を行っている部分はここ↓

    ' 販売金額列を基準に降順でソートを適用
    With tbl.Sort
        .SortFields.Clear
        .SortFields.Add Key:=tbl.ListColumns(sort_col_idx).Range, _
                        SortOn:=xlSortOnValues, _
                        Order:=xlDescending, _
                        DataOption:=xlSortNormal
        .Header = xlYes
        .Apply
    End With

処理の手順は次のようになっている。

  1. SortFields.Clear
    既存のソート条件をクリア(初期化)。
  2. SortFields.Add
    ソート対象の列を指定し、降順で並び替える。
    • Key:ソート対象の列(販売金額列)
    • SortOn:値に基づいてソート(xlSortOnValues
    • Order:降順(xlDescending
    • DataOption:通常のデータとして扱う(xlSortNormal
  3. Header
    最初の行がヘッダーの場合には xlYes を指定
  4. Apply
    設定したソートを適用。これがないと、表が更新されない(並べ替えが実行されない)。
Warning

テーブル(ListObject)とセル参照の場合とでは、ソート方法が異なる。たとえば、セル参照の場合は、ソート対象の範囲を.SetRangeで明示的に指定する必要がある。

.SortFields.Addの引数は下表の通り。

引数必須/省略可(規定値)説明
Key必須ソート範囲(RangeKey:=Range("B2:B100")
SortOn省略可(xlSortOnValuesソート基準(値・色・アイコンなど)SortOn:=xlSortOnValues
Order省略可(xlAscending並び順(昇順・降順)Order:=xlDescending
CustomOrder省略可(通常の昇順・降順が適用)カスタムソートの順序を指定CustomOrder:="日,月,火,水,木,金,土"
DataOption省略可(xlSortNormal数値・テキストの区別DataOption:=xlSortNormal

SortOnの定数は下表の通り。

定数説明
xlSortOnValues値に基づいてソート(規定値)
xlSortOnCellColorセルの背景色に基づいてソート
xlSortOnFontColor文字色に基づいてソート
xlSortOnIconアイコンセットに基づいてソート

Order の定数は下表の通り。

定数説明
xlAscending昇順(小さいものから大きいものへ)
xlDescending降順(大きいものから小さいものへ)

DataOptionの定数は下表の通り。

説明
xlSortNormal文字列と数値を別々に並べ替え
xlSortTextAsNumbers数値として解釈可能なテキスト(例: "10", "100", "2")を数値として扱い、数値としてソートする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です