Excelを使っていると、データを「複数の条件」で並び替えたい場面は多くあります。
たとえば以下のようなケースです。
- 部署ごとに社員をまとめ、その中で入社日の昇順に並べたい
- 商品カテゴリーごとに並べ、その中で売上高を降順にしたい
Excelの手動操作でも複数列ソートは可能ですが、VBAを使うと繰り返し処理が簡単になり、大量データの整理にも役立ちます。
この記事では、VBAで複数列の並び替えを行う方法について解説します。
目次
1. 複数列ソートの基本
VBAで並び替えを行うときは、以下の手順で設定します。
- SortFieldsにソート条件を追加する
- 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でのデータ整理が一気に効率化されます。
コメント