Excel VBAでは Sortメソッド を使うことで、シート上のデータを自動で並び替えることができます。
この記事では、もっとも基本的な「1列を昇順に並び替える方法」を解説します。
1. Sortの基本構文
VBAで並び替えを行うときは、以下のように書きます。
Range("並び替え範囲").Sort _
Key1:=Range("基準列"), _
Order1:=xlAscending, _
Header:=xlYes
- Range(“並び替え範囲”)
並び替える対象となるセル範囲を指定します。 - Key1:=Range(“基準列”)
並び替えの基準となる列(1列)を指定します。 - Order1:=xlAscending
並び替えの順序を指定します。xlAscending
→ 昇順(小さい順、あいうえお順)xlDescending
→ 降順(大きい順、わおえうい順)
- Header:=xlYes
先頭行を「見出し行」として扱うかどうかを指定します。xlYes
→ 1行目は見出し(並び替え対象から除外)xlNo
→ すべてデータとして扱う
2. 実用例:売上データを昇順に並び替える
以下のような売上データを「売上金額(B列)」で昇順に並び替える例を示します。
商品名 | 売上金額 |
---|---|
りんご | 300 |
みかん | 120 |
バナナ | 500 |
ぶどう | 250 |
VBAコード
Sub 売上昇順に並び替え()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'並び替え範囲全体を指定(A1:B5)
ws.Range("A1:B5").Sort _
Key1:=ws.Range("B2"), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
3. コード解説
Range("A1:B5")
データ全体の範囲を指定します。見出しも含めて指定するのが一般的です。Key1:=ws.Range("B2")
並び替えの基準を「B列(売上金額)」にしています。- B列のどのセルを指定しても列単位で認識されます。
B1
を指定してもOKですが、Header:=xlYes
の場合は1行目を見出しとして扱うため、B2
を指定するのが推奨です。
Order1:=xlAscending
昇順で並び替えます。小さい数字 → 大きい数字へ。Header:=xlYes
A1:B1は見出しとして扱い、並び替え対象から除外します。
4. 実行結果
商品名 | 売上金額 |
---|---|
みかん | 120 |
ぶどう | 250 |
りんご | 300 |
バナナ | 500 |
売上金額が小さい順に並び替えられました。
5. よくあるつまずきポイント
- 範囲に見出しを含めずに指定してしまうと、見出しがデータ扱いされる
→Header:=xlYes
を設定し、範囲は必ず見出しを含めて指定しましょう。 - Key1に列全体(例:
Range("B:B")
)を指定するとエラーになることがある
→ 並び替える範囲内のセル(例:Range("B2")
)を指定するのが正しい書き方です。
6. まとめ
- VBAのSortメソッドを使えば、1列を簡単に昇順に並び替え可能
Key1
で基準列、Order1
で昇順・降順を指定するHeader
を正しく指定することで見出しを守れる
コメント