【VBA】テーブル(ListObject)の列を指定して昇順/降順に並び替える方法

Excelのテーブル(ListObject)を使うと、データを効率的に管理できます。その中でも「並び替え(ソート)」は、データを分析する上で欠かせない操作です。VBAを利用すれば、手作業で並び替える必要がなくなり、自動処理によって作業効率を大幅に向上できます。

本記事では テーブル列を指定して昇順/降順に並び替える方法 を、サンプルコードとともにわかりやすく解説します。


1. ListObjectでの並び替えの基本

Excelのテーブルは ListObject として扱われます。テーブルには複数の列があり、それぞれを ListColumn として参照できます。

並び替えは以下の手順で行います。

  1. 対象のテーブルを取得する
  2. Sortオブジェクトを利用してソート条件を指定する
  3. 昇順または降順を選択して実行する

Sort オブジェクトを使うことで、柔軟な並び替えが可能になります。


2. テーブルの特定の列を昇順に並び替える方法

例えば、テーブル「Table1」があり、その中の「売上」列を 昇順 に並び替える場合は以下のように記述します。

Sub テーブル列を昇順に並び替え()
    Dim ws As Worksheet
    Dim lo As ListObject
    
    'Sheet1のテーブル「Table1」を取得
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    '既存の並び替え条件をクリア
    lo.Sort.SortFields.Clear
    
    '「売上」列を昇順で並び替え
    lo.Sort.SortFields.Add _
        Key:=lo.ListColumns("売上").Range, _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    
    '並び替えを適用
    With lo.Sort
        .Header = xlYes '1行目はヘッダーとして扱う
        .Apply
    End With
End Sub

解説

  • lo.ListColumns("売上").Range
    並び替え対象の列を指定します。列名で指定できるので、シート構造が変わっても安心です。
  • Order:=xlAscending
    昇順(小さい順 → 大きい順)を意味します。

3. テーブルの特定の列を降順に並び替える方法

次に、同じ「売上」列を 降順(大きい順 → 小さい順)に並び替える例です。

Sub テーブル列を降順に並び替え()
    Dim ws As Worksheet
    Dim lo As ListObject
    
    'Sheet1のテーブル「Table1」を取得
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    '既存の並び替え条件をクリア
    lo.Sort.SortFields.Clear
    
    '「売上」列を降順で並び替え
    lo.Sort.SortFields.Add _
        Key:=lo.ListColumns("売上").Range, _
        SortOn:=xlSortOnValues, _
        Order:=xlDescending, _
        DataOption:=xlSortNormal
    
    '並び替えを適用
    With lo.Sort
        .Header = xlYes
        .Apply
    End With
End Sub

解説

  • Order:=xlDescending
    降順を意味します。売上データであれば、上位の売上を確認したいときに役立ちます。

4. コード活用のポイント

  • 列名で指定するのがベスト
    列番号(例: lo.ListColumns(2))でも指定できますが、列の追加や順序変更に弱いため、列名を使う方が保守性が高いです。
  • 複数条件での並び替えも可能
    SortFields.Add を複数記述することで、優先順位をつけた並び替えができます。
    関連記事(優先順位をつけた並び替え)
  • 定期処理に応用可能
    売上集計やランキング作成のマクロに組み込むと、自動でデータを整理できます。

5. まとめ

  • テーブル(ListObject)の並び替えは Sort オブジェクトを利用する
  • Order:=xlAscending で昇順、Order:=xlDescending で降順を指定できる
  • 列名で指定すると保守性が高い

VBAを使えば、毎回手動で並び替えをしなくても、自動で並び替えを実行できます。特に売上管理やデータ分析では大きな時短効果を発揮します。

コメント

タイトルとURLをコピーしました