並び替えとは
Excelでデータを扱う場合には、複数の列があった場合に、特例の列で並べ替えを行うことがあります。
VBAでも並べ替えはいくつかの方法がありますが、一番シンプルなのはSortメソッドを利用することです。
VBAで Sort
メソッドを使う場合、Range.Sort
を直接使う方法と、SortFields
を使う方法の2種類があります。
今回は 「Range(“A1:C100”).Sort」 のように簡単に書ける方法 について解説します。
RangeとSortを使った基本構文
Range.Sort
を使うと、対象の範囲に対して簡単に並べ替えを行うことができます。
基本の書き方は次の通りです。
Range("並べ替え範囲").Sort Key1:=Range("並べ替え基準"), Order1:=xlAscending, Header:=xlYes
並べ替えに必要な内容が多いので、少し長くなっていますが、並べ替えを行うために必要な情報である引数(ひきすう)としては、次のようなものがあります。
主な引数の意味
引数 | 説明 |
---|---|
Key1 | 並べ替えの基準とするセル範囲 (例: Range("A1") ) |
Order1 | 並べ替えの順番 ( xlAscending =昇順、xlDescending =降順) |
Header | ヘッダー行の有無 ( xlYes =ヘッダーあり、xlNo =なし) |
基本的な並べ替えの例
Keyを増やすことで条件を増やすことができます。それぞれ1〜3つまでの例を挙げます。
1. 1つのキーで並べ替え
例えば、「A列を基準に昇順で並べ替える」場合は、次のように書きます。
Sub a_sort()
Range("A1:C100").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
End Sub
このコードの動作
- 範囲
A1:C100
を対象に並べ替え - A列のデータ(A2:A100)を昇順(小さい順) に並べ替え
- ヘッダー(見出し行)を考慮して並べ替え
降順に並べ替えたい場合
Sub SortByColumnADesc()
Range("A1:C100").Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlYes
End Sub
このように並べ替えを「適用する範囲」にSortメソッドをくっつけ、「並べ替えたい列の1行目のセル」をKey1に設定し、並べ替えの方法をOrder1で指定し、タイトル行があるかどうかをHeaderで設定すると並べ替えを行うことができます。
2. 2つのキーで並べ替え
もちろん、1つの条件だけでなく、複数の条件で並べ替えをすることができます。
例えば、「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
このコードの動作
- A列を昇順 に並べ替える
- A列が同じ値の場合は、B列を降順 に並べ替える(A列が先に並べ変わっているので、A列は関係する値が固まっている)
3. 3つのキーで並べ替え
さらにもう一つ条件を追加して、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
このコードの動作
- A列を昇順
- A列が同じ場合はB列を降順
- A列・B列が同じ場合はC列を昇順
並べ替え時の注意点
並び替えを行う上で、注意をしないといけないのは、ヘッダーがあるか、ないか、どこまでの範囲を並べ替えるのかを適切に指定することです。
① ヘッダー(見出し行)の指定
ヘッダーは見出し行、つまり、1行目に書いている項目やタイトルの部分で、これがあるのか、ないのかを指定する必要があります。
ヘッダーがあるのに、ヘッダーなしで指定をすると、1行目も並び替えの対象となってしまい、全てが並び変わってしまいます。
ヘッダーの設定方法としては、定数の「xlYes」(ヘッダーがある)もしくは「xlNo」(ヘッダーがない)で指定をします。
Header:=xlYes
→ 1行目をヘッダーとして扱うHeader:=xlNo
→ ヘッダーなし(全行をデータとして並べ替え)
もし、ヘッダーなしのデータを並べ替える場合は、次のように指定します。
Range("A1:C100").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo
② 並べ替え範囲を適切に指定する
並べ替え範囲を誤ると、意図しない並べ替えが行われることがあります。
例えば、 B列を基準に並べ替えるのに、範囲を「B列」だけにするとA列が並び替えられない ため、必ず 表全体を指定する ようにしましょう。
NG例(A列が並び替えられない)
Range("B1:B100").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
OK例(A~C列全体を並べ替える)
Range("A1:C100").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
まとめ
並び替えについて、一番シンプルな方法はSortメソッドを利用することです。
Sortメソッドは基本的に最大3つまで設定ができます。4つ以上は設定できないので注意が必要です。
ヘッダーの指定や、並び替え範囲の指定は適切に行いましょう。
Range.Sort
を使えば、手軽に並べ替えができるので、ぜひ活用してみてください!
コメント