Excel VBA で 4 列以上を優先順位付きでソートする方法【複数キー対応マクロ】

目次

概要

本記事では、Excel VBA の SortFields コレクション を活用し、4 列以上の複数キーでデータを並べ替えるマクロの作成手順を解説いたします。手動ソートでは時間がかかる複合条件も、マクロ化すればワンクリックで再現可能です。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ構造見出し行を含む表(CurrentRegion で取得できる範囲)
マクロ設置先標準モジュール

サンプルコード

以下のコードを標準モジュールに貼り付けて実行してください。列順や列番号は例示用に変更してありますので、そのままご利用いただけます。

Sub MultiKeySort()

    Dim tgtRange As Range          ' ソート対象範囲
    Dim ws       As Worksheet      ' 対象シート
    
    Set ws = ActiveSheet           ' 必要に応じてシート名を指定
    Set tgtRange = ws.Range("B2").CurrentRegion   ' 見出し行を含む範囲を取得

    With ws.Sort
        ' 既存のソート条件をクリア
        .SortFields.Clear
        
        '--- 並べ替えキーを追加(例:列 4 → 列 1 → 列 2 → 列 7 の順)---
        .SortFields.Add Key:=tgtRange.Columns(4), SortOn:=xlSortOnValues, Order:=xlAscending
        .SortFields.Add Key:=tgtRange.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending
        .SortFields.Add Key:=tgtRange.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending
        .SortFields.Add Key:=tgtRange.Columns(7), SortOn:=xlSortOnValues, Order:=xlAscending
        
        '--- ソート設定 ---
        .SetRange tgtRange
        .Header = xlYes            ' 見出し行あり
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply                      ' 並べ替えを実行
    End With

End Sub

コード解説

説明
6–7ws.Range("B2").CurrentRegion で表全体を自動取得しています。開始セルは業務に合わせて変更可能です。
11.SortFields.Clear で既存の並べ替え条件をリセットし、意図しないキー混在を防ぎます。
14–17.SortFields.Add を 4 回呼び出し、優先順位どおりに列を登録しています。Key には対象列、Order には昇順 (xlAscending) または降順 (xlDescending) を指定します。
20–23.SetRange で並べ替え対象範囲を指定し、.Apply で処理を実行しています。

応用例

目的実装のヒント
降順を混在させたい目的の列に対し Order:=xlDescending を指定します。
ソート条件を配列で管理Dim sortCols As Variant: sortCols = Array(4, 1, 2, 7) とし、ループで .Add を呼び出すと柔軟に変更できます。
5 列以上の並べ替え.SortFields.Add の行を追加するだけで対応可能です。

よくある質問

質問回答
見出し行がない場合の設定方法は。.Header = xlNo に変更してください。
アクティブセル周辺に空白行があると CurrentRegion が正しく取得できません。空白行を削除するか、明示的に範囲を Set tgtRange = ws.Range("B2:H100") のように指定してください。

まとめ

SortFields コレクションを使用すると、Excel VBA で 4 列以上の複合ソートを簡潔に実装できます。まずはサンプルコードを実行し、意図した順序でデータが並ぶかをご確認ください。列番号や昇降順を調整することで、さまざまな業務シナリオへ応用いただけます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次