Excel VBAでは、フィルタ(AutoFilter)と並び替え(Sort)を組み合わせて、複数条件や優先順位を考慮した並び替えを実現できます。
例えば、
- 「売上100以上のデータを抽出 → 支店ごとに並べて、その中で日付順に整列」
- 「在庫が10以下の商品を抽出 → カテゴリ順 → 商品名順に並び替え」
といった処理を自動化できるのがポイントです。
ここでは、その優先順位付きの並び替えの基本構文と実例を解説します。
1. 特定の条件で絞ったあとに、優先順位付きで並べる
サンプルコード例
Sub フィルタ後に優先順位で並び替え()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'データ範囲を設定(見出し付き)
Dim targetRange As Range
Set targetRange = ws.Range("A1:D20")
'1. フィルタで「売上(C列)が100以上」を抽出
targetRange.AutoFilter Field:=3, Criteria1:=">=100"
'2. 優先順位をつけて並び替え(支店→日付)
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
.Header = xlYes
.Apply
End With
End Sub
コードの解説
- フィルタ条件
targetRange.AutoFilter Field:=3, Criteria1:=">=100"
→ C列(売上)が100以上のデータのみを抽出 - 優先順位付きソート
- 第1キー:支店(A列)を昇順に並び替え
- 第2キー:その中で日付(B列)を昇順に並び替え
.SortFields.Clear
→ 並び替え条件の初期化。忘れると過去の条件が残って意図しない結果になる
2. 実務での利用シーン
- 営業データの分析
→ 「売上100万円以上の案件を抽出 → 担当者ごとに並び替え → さらに契約日順に整列」 - 在庫管理
→ 「在庫が少ない商品を抽出 → 商品カテゴリ順に並び替え → その中で商品コード順に整列」 - 人事・勤怠管理
→ 「勤続年数10年以上の社員を抽出 → 部署ごとに並び替え → 入社日順に整列」
このように、複数条件のフィルタと優先順位付きソートを組み合わせることで、データをより意味のある形に整理できます。
3. まとめ
- VBAでは、フィルタで抽出後に複数列で並び替えが可能
- 優先順位は「第1キー → 第2キー → 第3キー…」の順に指定
.SortFields.Clear
を入れるのがトラブル回避のコツ
👉 このテクニックを活用すると、単純な抽出や1列ソートよりもさらに実務的なレポート作成が可能になります。
コメント