VBAで4つ以上のキーで並べ替える方法|Sortメソッドを複数回実行する手順

VBAの Sort メソッドは一度に指定できる並べ替えキーが最大3つという制限があります。4つ以上の列で並べ替えたい場合は、Sort を複数回に分けて実行する必要があります。

この記事では、4つ以上のキーを使った並べ替えの書き方と、実行順序の考え方を解説します。

Sortメソッドで4つ以上のキーを使って並べ替えるには?

「A列→B列→C列→D列」の優先順位で並べ替える場合、優先度の低いキーから順に実行するのがポイントです。最後に実行した並べ替えが最優先されるため、最優先させたいA列を一番最後に実行します。

Sub multi_sort1()
    ' 第四キー(D列を降順・最後に上書きされるため最初に実行)
    Range("A1:D100").Sort Key1:=Range("D1"), Order1:=xlDescending, Header:=xlYes

    ' 第三キー(C列を昇順)
    Range("A1:D100").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlYes

    ' 第二キー(B列を降順)
    Range("A1:D100").Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlYes

    ' 第一キー(A列を昇順・最後に実行するため最優先される)
    Range("A1:D100").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
End Sub

D列 → C列 → B列 → A列 の順に実行することで、最終的に A列が最優先された並べ替えになります。「A列が一番優先なのにD列から書く」という点が直感に反しやすいので注意が必要です。

Key1〜Key3を組み合わせて効率化するには?

1回の Sort で3つのキーを同時指定する方法を使うと、実行回数を2回に減らせます。

Sub multi_sort2()
    ' まず優先度が最も低いD列を単独で並べ替え
    Range("A1:D100").Sort Key1:=Range("D1"), Order1:=xlDescending, Header:=xlYes

    ' 残りA・B・C列を1回でまとめて並べ替え(Key1が最優先)
    Range("A1:D100").Sort _
        Key1:=Range("A1"), Order1:=xlAscending, _
        Key2:=Range("B1"), Order2:=xlDescending, _
        Key3:=Range("C1"), Order3:=xlAscending, _
        Header:=xlYes
End Sub

Key1が最優先されるため、D列(最低優先)を先に単独処理し、A・B・C列をKey1〜Key3にまとめて割り当てます。

まとめ

  • Sort メソッドは1回につき最大3キーまでという制限がある
  • 4つ以上のキーで並べ替えるにはSort を複数回実行する
  • 1回ずつ実行する場合は優先度が低いキーから順に実行する(最後が最優先)
  • Key1〜Key3を組み合わせる場合は優先度最低のキーを先に単独処理し、残りをKey1〜Key3に割り当てる
  • 実行順序の考え方が直感と逆になりやすいため、コメントで優先順位を明記しておくと読みやすい

よくある質問

Key4を指定するとどうなりますか?

実行時エラーになります。Sort メソッドの引数として Key4 は存在しないため、コンパイルエラーが発生します。4つ目以降のキーは必ず別の Sort 実行として分けて書く必要があります。

並べ替えの対象範囲はどう指定するのが正しいですか?

実際のデータ範囲に合わせて指定します。データが増減する場合は Range("A1").CurrentRegion を使うと自動的にデータ全体が対象になります。固定の "A1:D100" より実用的です。

Header:=xlYesは必ず必要ですか?

1行目がヘッダーの場合は xlYes を指定しないとヘッダー行もデータとして並べ替えられてしまいます。ヘッダーがない場合は xlNo、自動判定させる場合は xlGuess を指定します。

降順・昇順はどう指定しますか?

昇順は Order:=xlAscending、降順は Order:=xlDescending です。省略した場合は昇順(xlAscending)になります。

並べ替え後に元の順序に戻すことはできますか?

VBAの並べ替えはCtrl+Zで元に戻せない場合があります。元の順序を保持したい場合は、並べ替え前に連番列を追加しておき、作業後にその列で昇順に並べ替えることで元の順序に戻せます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール