Sortメソッド解説(Excel VBA)

Excel VBAにおけるRange.Sortメソッドの詳細解説

Excel VBAのRange.Sortメソッドは、指定した範囲のセルを特定の基準に基づいてソート(並べ替え)するためのメソッドです。このメソッドは多数の引数を持つことができ、その結果として非常に多機能かつ柔軟な並べ替えが可能になります。

Range.Sortメソッドの基本的な構文

Range.Sortメソッドの最も基本的な形式は次のようになります:

Range.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)

これらの引数の詳細は以下の通りです:

  • Key1, Key2, Key3: これらはソートの基準となる範囲を指定します。Key1が最も優先され、Key2はKey1が同じ場合のソート基準となり、Key3はKey1とKey2が同じ場合のソート基準となります。
  • Order1, Order2, Order3: これらは対応するKeyに対するソートの順序を指定します。xlAscendingは昇順(小さいものから大きいものへ)、xlDescendingは降順(大きいものから小さいものへ)を指定します。
  • Type: ソートのタイプを指定します。xlPinYinは中国語のピンインに基づいたソートを行います。
  • Header: ヘッダーがあるかどうかを指定します。xlGuessはExcelにヘッダーの有無を推測させ、xlYesはヘッダーがあると指定、xlNoはヘッダーがないと指定します。
  • OrderCustom: カスタムオーダーのインデックスを指定します。省略可能です。
  • MatchCase: 大文字と小文字を区別するかどうかを指定します。Trueで区別、Falseで区別しません。
  • Orientation: ソートの方向を指定します。xlTopToBottomは上から下へ(列を基準に)、xlLeftToRightは左から右へ(行を基準に)ソートします。
  • SortMethod: ソート方法を指定します。xlPinYinは中国語のピンインに基づいたソートを行います。
  • DataOption1, DataOption2, DataOption3: ソートのデータオプションを指定します。xlSortNormalは通常のソートを、xlSortTextAsNumbersはテキストを数値としてソートします。

基本的な使用例

単語
やま
はやし
かわ
うみ
ほし
とり
いぬ
ねこ

以下に、Range.Sortメソッドを用いた基本的な使用例を示します。この例では、A列のデータを昇順にソートします。

Sub SortRange()
    Range("A1:A10").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess
End Sub

このコードはセルA1からA10までの範囲を昇順にソートします。Key1にソートの基準となるセル(この場合はA1)を指定し、Order1にソートの順序を指定(この場合は昇順)、Headerにヘッダーの有無を指定(この場合はExcelに推測させる)しています。

より詳細な使用例

国籍名前年齢職業
日本山田25エンジニア
アメリカSmith30デザイナー
日本佐藤35教師
日本鈴木20学生
アメリカJohnson40エンジニア
アメリカBrown35デザイナー
日本田中30医者
アメリカWilliams25学生
日本伊藤40エンジニア

以下に、Range.Sortメソッドを用いたより具体的な使用例を示します。この例では、4列のデータを二つのキー(A列とB列)に基づいてソートします。

Sub SortMultipleColumns()
    With Worksheets("Sheet1").Range("A1:D10")
        .Sort Key1:=.Columns(1), Order1:=xlAscending, _
              Key2:=.Columns(2), Order2:=xlDescending, _
              Header:=xlYes
    End With
End Sub

このコードは、シート名が”Sheet1″のA1からD10までの範囲をソートします。第一ソートキーとして列1(A列)を昇順に、そして第二ソートキーとして列2(B列)を降順に指定しています。さらに、HeaderパラメータをxlYesとして指定することで、最初の行がヘッダとして扱われ、ソートの対象外となります。

前述の表において上記のVBAコードを実行すると、最初に「国籍」列で昇順にソートされ、次に「名前」列で降順にソートされます。それにより、同じ国籍の人々が一緒になり、そして各国籍内では名前が逆のアルファベット順(日本語では五十音順の逆)でソートされる結果になります。

このような二つのキーを使用したソートは、例えば人々のリストを国籍でまずソートし、その後で名前でソートするといった場合などに有用です。