教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでセル範囲内を並べ替え(キーが複数の場合)する方法

構文

構文は以下の通りです。

Range("範囲").Sort Key1:=Range("キー1の範囲"), Order1:=xlAscending, _
                               Key2:=Range("キー2の範囲"), Order2:=xlDescending, _
                               Key3:=Range("キー3の範囲"), Order3:=xlDescending, _
                               Header:=xlYes

解説

Range("範囲")は、並べ替えを行いたいセルの範囲を指定します。Key1は、第一の並べ替えキーを指定します。これは最も重要な基準となる列の範囲です。Order1は、Key1で指定した列の並べ替え順を指定します。xlAscendingは昇順、xlDescendingは降順です。Key2は、第二の並べ替えキーを指定します。Key1で同じ値が存在する場合、次にこのキーが使用されます。Order2は、Key2で指定した列の並べ替え順を指定します。Key3は、第三の並べ替えキーを指定します。Key2で同じ値が存在する場合、次にこのキーが使用されます。Order3は、Key3で指定した列の並べ替え順を指定します。Headerは、範囲内に見出しがある場合、xlYesを指定します。見出しがない場合はxlNoを指定します。

引数 内容
Key1, Key2, Key3 ソートのキーとなる範囲を指定します。複数のキーを指定することも可能です。
Order1, Order2, Order3 各キーに対するソートの順序を指定します。xlAscending(昇順)またはxlDescending(降順)を指定します。
Header ソート範囲にヘッダーがある場合、xlYesと指定します。ヘッダーがない場合はxlNoと指定します。

プログラミング例

具体的なプログラミング例を紹介します。

Sub 複数キーで並べ替え()
    ' 並べ替え範囲を指定
    Range("A1:C10").Sort Key1:=Range("A1:A10"), Order1:=xlAscending, _
                                       Key2:=Range("B1:B10"), Order2:=xlDescending, _
                                       Header:=xlYes
End Sub

上記のプログラムは、セル範囲A1:C10を並べ替えます。まず、A列(Key1)を昇順(小さい順)で並べ替え、その後にB列(Key2)を降順(大きい順)で並べ替えます。ヘッダー行があるため、Header:=xlYesが指定されています。

まとめ

Sortを使用して、セル範囲を複数のキーで並べ替えることができます。Key1で指定した列が最優先の並べ替え基準となり、Key2はKey1で並べ替えた結果同じ値があった場合に使用されます。Key3はKey2で並べ替えた結果同じ値があった場合に使用されます。並べ替え順はxlAscendingで昇順、xlDescendingで降順を指定できます。