教えて!ExcelVBA!

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

【ExcelVBA セル操作】セル範囲内を並べ替え(Sort)するにはどうすればいいの?教えて!

構文

構文は以下の通りです。

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

2.ヘッダーのない範囲をソートする

ソート範囲にヘッダーがない場合は、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

プログラミング例

以下に、具体的なプログラミング例を幾つか紹介します。

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

この例では、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

この例では、ワークブック内のすべてのシートに対して、A1:C10 の範囲を昇順でソートしています。

まとめ

Sortメソッドを使えば、プログラムを通じてセルのデータを簡単にソートすることができます。是非活用してください。