スポンサーリンク

【VBA】フィルタ・並び替えの発展的なテクニック:並び替えの優先順を数式列にまとめて実行する方法

Excelで業務データを扱う際、「単純に日付順に並べたい」や「数値を昇順に整列したい」といった基本的な並び替えはよく行われます。
しかし実務では、複数の条件を組み合わせて優先順位をつけた並び替え が必要になることも少なくありません。

例えば次のようなケースです。

  • ステータス(処理済・未処理)を基準に並び替え
  • 同じステータス内で、納期が早い順に並び替え
  • さらに納期が同じ場合は、金額が大きい順に並び替え

こうした場合、数式列を追加して「並び替え優先順位」を1つの数値にまとめる方法 が便利です。
その後、この補助列を基準にVBAで並び替えを行うことで、複雑な優先順位を一度に処理できます。

スポンサーリンク

1. 補助列を用意する考え方

複数の条件を組み合わせるとき、それぞれを個別に SortFields.Add で指定しても良いのですが、条件が多くなると可読性が下がります。
そこで、補助列に数式を入れて「並び替え用のキー」をまとめる ことで処理を簡略化できます。

例:

  • ステータス(未処理=1、処理済=2)
  • 納期(日付をシリアル値でそのまま利用)
  • 金額(大きい順にするためマイナス値に変換)

これらを組み合わせて「並び替え優先順位列」を作ることで、1列だけを基準に並び替え可能になります。


スポンサーリンク

2. 実際のコード例

以下は、Sheet1にあるデータを対象に補助列を追加し、優先順位を数式で作成してから並び替えるサンプルです。

Sub 並び替え_優先順位_数式列()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim sortRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '最終行取得
    
    '補助列をD列に作成(ステータス、納期、金額を統合)
    With ws
        .Range("D1").Value = "並び替えキー"
        .Range("D2:D" & lastRow).FormulaR1C1 = _
            "=IF(RC1=""未処理"",1,2)&TEXT(RC2,""yyyymmdd"")&TEXT(1000000-RC3,""000000"")"
            'RC1=ステータス, RC2=納期, RC3=金額
    End With
    
    '並び替え範囲を指定(ヘッダー含む)
    Set sortRange = ws.Range("A1:D" & lastRow)
    
    '補助列をキーに並び替え
    With sortRange
        .Sort Key1:=ws.Range("D2"), Order1:=xlAscending, Header:=xlYes
    End With
End Sub

スポンサーリンク

3. コードのポイント解説

  • FormulaR1C1 を使う理由
    相対参照を使いやすくするためです。RC1 は1列目(ステータス列)、RC2 は2列目(納期列)、RC3 は3列目(金額列)を意味します。
  • & で条件を連結
    ステータス(1 or 2)、納期(日付)、金額(逆順にするため引き算後ゼロ埋め)を連結し、文字列として「並び替え用キー」を生成しています。
  • ゼロ埋め (TEXT) の工夫
    金額や日付をそのまま文字列にすると桁ズレが起こるので、桁数を固定して文字列化しています。

スポンサーリンク

4. 実務での活用例

この方法は次のような場面で特に役立ちます。

  • 顧客リスト管理
    「重要度(高・中・低)」→「契約終了日」→「売上金額」で並べたい場合。
  • タスク管理表
    「未完了を上に」→「期限が近い順」→「担当者名の五十音順」で整理したい場合。
  • 受注データ処理
    「出荷ステータス」→「納期」→「受注番号」でソートし、出荷作業を効率化。

5. 注意点

  • 補助列を作る場合は、処理後に削除するか非表示にすると、シートがすっきりします。
  • 文字列連結で桁ズレが起きないように、TEXT関数で桁を揃えることを忘れないようにしましょう。
  • 並び替えの優先順位を変えたいときは、補助列の数式を修正するだけで対応できるので、VBAコード自体を大きく書き直す必要がありません。

6. まとめ

  • 複数条件を組み合わせる並び替えは、補助列を作って一括処理するのが効率的。
  • FormulaR1C1 を使って条件を文字列に連結し、「並び替えキー」を生成する方法が便利。
  • 実務ではタスク管理や顧客リスト整理など、複雑な優先順を一発でソートできるメリットが大きい。

コメント

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