目次
概要
本記事では、Excel VBA の SortFields コレクション を活用し、4 列以上の複数キーでデータを並べ替えるマクロの作成手順を解説いたします。手動ソートでは時間がかかる複合条件も、マクロ化すればワンクリックで再現可能です。
前提条件
項目 | 内容 |
---|---|
対応 Excel | Microsoft 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–7 | ws.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 列以上の複合ソートを簡潔に実装できます。まずはサンプルコードを実行し、意図した順序でデータが並ぶかをご確認ください。列番号や昇降順を調整することで、さまざまな業務シナリオへ応用いただけます。