Excelでデータを扱うとき、特定の列を基準に並べ替えを行う場面はよくあります。VBAで並べ替えを行う最もシンプルな方法が Range.Sort メソッドです。
この記事では、1〜3つのキーを使った並べ替えの書き方と、ヘッダー指定・範囲指定の注意点を解説します。
VBAでSortメソッドを使った並べ替えの基本構文とは?
基本の書き方は次のとおりです。
Range("並べ替え範囲").Sort Key1:=Range("基準列の1行目"), Order1:=xlAscending, Header:=xlYes
主な引数の意味を整理します。
| 引数 | 説明 |
|---|---|
Key1 | 並べ替えの基準とする列(例:Range("A1")) |
Order1 | 昇順:xlAscending、降順:xlDescending |
Header | ヘッダーあり:xlYes、なし:xlNo |
1つのキーで並べ替えるには?
A列を基準に昇順で並べ替えるシンプルな例です。
Sub a_sort()
Range("A1:C100").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
End Sub
降順にしたい場合は Order1:=xlDescending に変えるだけです。
2つのキーで並べ替えるには?
「A列を昇順、A列が同じ場合はB列を降順」という複数条件の並べ替えです。
Sub a_b_sort()
Range("A1:C100").Sort _
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlDescending, _
Header:=xlYes
End Sub
Key1が最優先されます。A列の値が同じ行同士の中でB列が降順に並びます。
3つのキーで並べ替えるには?
「A列→B列→C列」の優先順位で並べ替えます。
Sub a_b_c_sort()
Range("A1:C100").Sort _
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlDescending, _
Key3:=Range("C1"), Order3:=xlAscending, _
Header:=xlYes
End Sub
Key1〜Key3の順に優先度が高くなります。4つ以上のキーが必要な場合は Sort を複数回実行します(制限:1回につき最大3キー)。
ヘッダー指定と並べ替え範囲の注意点とは?
ヘッダーの指定
1行目に見出し行がある場合は Header:=xlYes を指定します。指定しないと見出し行もデータとして並べ替えられてしまいます。
並べ替え範囲は表全体を指定する
基準列だけを範囲に指定すると、他の列が並べ替えられないまま取り残されます。
' NG:B列だけ指定するとA・C列が動かない
Range("B1:B100").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
' OK:表全体を対象に指定する
Range("A1:C100").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
まとめ
Range.Sortでシンプルに並べ替えができる- Key1〜Key3 を使って最大3つの優先条件を指定できる
- 昇順は
xlAscending、降順はxlDescending - ヘッダーがある場合は
Header:=xlYesを忘れずに指定する - 並べ替え範囲は表全体を指定する(基準列だけではNG)
よくある質問
CurrentRegionを使って範囲を自動指定できますか?
できます。Range("A1").CurrentRegion.Sort ... と書くと、A1セルを含むデータ全体が自動的に対象になります。データが増減しても範囲を修正する必要がなくなります。
文字列の並べ替えと数値の並べ替えで動作が変わりますか?
変わる場合があります。数値として入力されているものは数値順、文字列として入力されているものは文字コード順に並べ替えられます。数値が文字列として格納されている場合は意図しない順序になることがあるため、データ型を確認してから並べ替えましょう。
並べ替え後に元の順序に戻せますか?
VBAによる並べ替えはCtrl+Zで元に戻せない場合があります。元の順序を保持したい場合は、並べ替え前に「連番」列を追加しておき、作業後にその列で昇順に並べ替えると元に戻せます。
シートを指定して並べ替えるにはどう書きますか?
Worksheets("シート名").Range("A1:C100").Sort ... のようにシートを明示して書きます。アクティブシートに依存しないよう、シート名を指定するのが安全です。
4つ以上のキーで並べ替えるにはどうすればいいですか?
Sort を複数回に分けて実行します。1回の Sort で最大3キーまでという制限があるため、優先度の低いキーから順に実行していく方法が有効です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



