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



