スポンサーリンク

【VBA】複数列で並び替える方法(最大64列まで)

Excelを使っていると、データを「複数の条件」で並び替えたい場面は多くあります。
たとえば以下のようなケースです。

  • 部署ごとに社員をまとめ、その中で入社日の昇順に並べたい
  • 商品カテゴリーごとに並べ、その中で売上高を降順にしたい

Excelの手動操作でも複数列ソートは可能ですが、VBAを使うと繰り返し処理が簡単になり、大量データの整理にも役立ちます。

この記事では、VBAで複数列の並び替えを行う方法について解説します。


スポンサーリンク

1. 複数列ソートの基本

VBAで並び替えを行うときは、以下の手順で設定します。

  1. SortFieldsにソート条件を追加する
  2. Sortメソッドを実行する

複数列で並び替える場合は、SortFields.Add を複数回使うことで実現できます。


スポンサーリンク

2. コード例:複数列で並び替える

以下の例では、A列(部署名)を昇順、B列(入社日)を昇順で並び替えます。

Sub 複数列で並び替え()
    Dim ws As Worksheet
    Dim targetRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set targetRange = ws.Range("A1:C20") '並び替える範囲を指定
    
    With ws.Sort
        '既存の並び替え条件をクリア
        .SortFields.Clear
        
        '1つ目のキー:A列(部署名)昇順
        .SortFields.Add Key:=ws.Range("A2:A20"), _
                        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        
        '2つ目のキー:B列(入社日)昇順
        .SortFields.Add Key:=ws.Range("B2:B20"), _
                        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        
        .SetRange targetRange '並び替え対象の範囲を指定(A1〜C20)
        .Header = xlYes '1行目を見出しとして扱う
        .Apply '並び替えを実行
    End With
End Sub

スポンサーリンク

3. ポイント解説

① SortFields.Add を複数回使う

  • 最初に指定した列が優先順位1位
  • 次に指定した列が優先順位2位
    といった形で並び替えが行われます。

例:

  • まず「部署名」で昇順にグループ分け
  • その中で「入社日」が古い順に並ぶ

② 最大64列まで指定可能

Excelの仕様として、並び替え条件は最大64列まで指定可能です。
ほとんどの業務では数列のソートで十分ですが、大規模データの分析にも対応できます。


③ .SortFields.Clear を忘れずに

並び替え条件を追加するときは、最初に .SortFields.Clear でリセットしましょう。
クリアしないまま新しい条件を追加すると、前回のソート条件が残り、意図しない並び替えになることがあります。


スポンサーリンク

4. 実務での活用例

  • 社員リスト
    部署 → 入社日 → 名前 の順でソート
  • 売上データ
    カテゴリ → 月 → 売上高 の順でソート
  • 顧客リスト
    都道府県 → 市区町村 → 顧客名 の順でソート

複数列ソートを活用することで、データを「見やすく」「分析しやすく」整えることができます。


5. まとめ

  • VBAで複数列ソートを行うには、SortFields.Add を複数回使う
  • 並び替えの優先順位は、追加した順番に決まる
  • 最大64列まで対応可能
  • 毎回 .SortFields.Clear で条件をリセットするのがポイント

複数列ソートをマスターすれば、Excelでのデータ整理が一気に効率化されます。

コメント

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