構文
構文は以下の通りです。
Range.Sort([Key1], [Order1], [Key2], [Type], [Order2], [Key3], [Order3], [Header])
解説
Sortメソッドは、セルのデータをソートすることができます。オプションについて、以下で説明します。
引数 | 内容 |
Key1, Key2, Key3 | ソートのキーとなる範囲を指定します。複数のキーを指定することも可能です。 |
Order1, Order2, Order3 | 各キーに対するソートの順序を指定します。xlAscending(昇順)またはxlDescending(降順)を指定します。 |
Header | ソート範囲にヘッダーがある場合、xlYesと指定します。ヘッダーがない場合はxlNoと指定します。 |
使い方
以下に、具体的な使い方を紹介します。
1.複数のキーでソートする
Key1, Key2, Key3 パラメータを使用して、複数のキーを指定することができます。これにより、最初のキーでソートし、同じ値の場合には次のキー、さらに同じ値の場合にはさらに次のキーでソートすることができます。
' キー1で昇順、キー2で降順、キー3で昇順にソートする例
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, _
Key2:=rng.Columns(2), Order2:=xlDescending, _
Key3:=rng.Columns(3), Order3:=xlAscending, _
Header:=xlYes
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, _
Key2:=rng.Columns(2), Order2:=xlDescending, _
Key3:=rng.Columns(3), Order3:=xlAscending, _
Header:=xlYes
2.ヘッダーのない範囲をソートする
ソート範囲にヘッダーがない場合は、Header:=xlNo と指定します。
' ヘッダーのない範囲を昇順でソートする例
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlNo
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlNo
3.ソート範囲のオートフィルタを無効にする
ソート後に自動的にオートフィルタが適用される場合、SortMethod パラメータに xlPinYin を指定することで、オートフィルタを無効にすることができます。
' ソート後にオートフィルタを無効にする例
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin
プログラミング例
以下に、具体的なプログラミング例を幾つか紹介します。
1.特定の範囲内のデータをソートする
指定した範囲内のデータをソートするには、Range オブジェクトを使用してソート範囲を指定します。
Sub SortSpecificRange()
Dim ws As Worksheet
Dim rng As Range
' シートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' ソート範囲を指定
Set rng = ws.Range("B2:D10")
' ソート実行
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlNo
End Sub
Dim ws As Worksheet
Dim rng As Range
' シートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' ソート範囲を指定
Set rng = ws.Range("B2:D10")
' ソート実行
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlNo
End Sub
この例では、Sheet1 の B2:D10 の範囲を昇順でソートしています。
2.複数のシートで同じソートを適用する
同じソートを複数のシートに適用する場合は、ループ構造を使用して各シートに対してソートを行います。
Sub SortMultipleSheets()
Dim ws As Worksheet
Dim rng As Range
' ソート範囲を指定
Set rng = Range("A1:C10")
' 全てのシートに対してソートを実行
For Each ws In ThisWorkbook.Sheets
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlYes
Next ws
End Sub
Dim ws As Worksheet
Dim rng As Range
' ソート範囲を指定
Set rng = Range("A1:C10")
' 全てのシートに対してソートを実行
For Each ws In ThisWorkbook.Sheets
rng.Sort Key1:=rng.Columns(1), Order1:=xlAscending, Header:=xlYes
Next ws
End Sub
この例では、ワークブック内のすべてのシートに対して、A1:C10 の範囲を昇順でソートしています。
まとめ
Sortメソッドを使えば、プログラムを通じてセルのデータを簡単にソートすることができます。是非活用してください。