【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
意図通りに並べ替えが適用された。
並べ替え処理を行っている部分はここ↓
    ' 販売金額列を基準に降順でソートを適用
    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処理の手順は次のようになっている。
SortFields.Clear
既存のソート条件をクリア(初期化)。SortFields.Add
ソート対象の列を指定し、降順で並び替える。Key:ソート対象の列(販売金額列)SortOn:値に基づいてソート(xlSortOnValues)Order:降順(xlDescending)DataOption:通常のデータとして扱う(xlSortNormal)
Header
最初の行がヘッダーの場合にはxlYesを指定Apply
設定したソートを適用。これがないと、表が更新されない(並べ替えが実行されない)。
.SortFields.Addの引数は下表の通り。
| 引数 | 必須/省略可(規定値) | 説明 | 例 | 
|---|---|---|---|
Key | 必須 | ソート範囲(Range) | Key:=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")を数値として扱い、数値としてソートする。 | 
関連リンク
この記事を書いた人
- ソフトデザイン工房|日々の業務にちょうどいい自動化を
 - ■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成にチャレンジ。
 




