4つ以上の並べ替え方法
Sortメソッドは、一度に指定できる並べ替えのキーが最大で3つまでという制限があります。
Sortメソッドの基本は、key1とあるように、Key1、Key2、Key3と設定ができますが、Key4を設定するとエラーとなります。
つまり、4つ以上のキーを使って並べ替えを行いたい場合は、Sortメソッドを分けて複数回実行する必要があります。
並べ替えコード(4つのキーを使用する方法)
例えば、「A列→B列→C列→D列」の順番で並べ替えを行いたい場合は、次のようにコードを分ける必要があります。
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
見ていただくとわかるように、A列を優先しようと思うとD列から順番に記載する必要があります。
D列を並び替えて、C列を並び替えて、B列を並び替えて、A列を並び替えるので、最終的にA列が最優先されるということになります。
「A列→B列→C列→D列」なので、A列から順番に書きたくなりますが、そのようにすると、最後に実行されるD列が最優先される、ということになるので注意が必要です。
並べ替えコード(Key1, Key2, Key3を使用する方法)
同じようにKey1〜Key3を使って表現しようと思うと次のようになります。
Sub multi_sort2()
' 最初にD列を並べ替え(降順)
Range("A1:D100").Sort Key1:=Range("D1"), Order1:=xlDescending, Header:=xlYes
' A列, B列, C列の3つのキーで並べ替え
Range("A1:D100").Sort _
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlDescending, _
Key3:=Range("C1"), Order3:=xlAscending, _
Header:=xlYes
End Sub
Key1〜Key3を使う場合には、Key1が優先されます。
そのため、先ほどのものと比べると頭を使いながら考える必要があります。
4つの並べ替えをする場合には、まず、一番優先が低いものを並べ替え、残りの3つを優先度が高い順番にKey1、Key2、Key3に割り振る、という流れになります。
この方法のポイント
- Sortメソッドの制限を回避する方法:VBAのSortメソッドは3つのキーまでしか指定できません。そのため、4つのキーで並べ替えたい場合は、順番に
Sort
メソッドを呼び出して並べ替えを行う必要があります。 - 実行順序の工夫が必要:最も優先するキーを最初に並べ替えます。この例では、
D列
を最初に並べ替えることで、この後の並べ替えがD列
の順番に影響しないようにしています。 - Key1, Key2, Key3 を組み合わせた方法:
Sort
メソッドを使って3つまでのキーを一度に並べ替え、残りを別に実行することで効率化できます。
まとめ
VBAで4つ以上のキーを使って並べ替えを行う方法について説明しました。
Sortメソッドの制限を回避するためには、最も優先するキーから順に Sort
を実行する方法が有効です。 また、並べ替えの順番を調整することで、思い通りの結果を得ることができます。
Key3まで使う方法はありますが、私としては1つずつ並び替えた方がイメージもしやすく、わかりやすいと考えています。
この方法を理解すれば、Excel VBAでのデータ操作をさらに効率的に行うことができます。
コメント