【Excelマクロ】4つ以上の並べ替え

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でのデータ操作をさらに効率的に行うことができます。

コメント