Excel 2007のSortオブジェクト


Sortオブジェクトで並べ替えを実行する

Excel 2007の新しい並べ替えは、

という2段階で行います。実際の並べ替えを担当するのがSortオブジェクトです。Sortオブジェクトは、次のように操作します。

    With ActiveSheet.Sort               ''Sortオブジェクトに対して
        .SetRange Range("A1:C10")       ''並べ替える範囲を指定し
        .Header = xlYes                 ''1行目がタイトル行かどうかを指定し
        .MatchCase = False              ''大文字と小文字を区別するかどうかを指定し
        .Orientation = xlTopToBottom    ''並べ替えの方向(行/列)を指定し
        .SortMethod = xlPinYin          ''ふりがなを使うかどうかを指定し
        .Apply                          ''並べ替えを実行します
    End With

1行目がタイトル行かどうかを指定するHeaderプロパティには、次の定数を指定します。

定数 数値 意味 既定値
xlGuess 0 Excelが自動判定します
xlYes 1 1行目はタイトル行です
xlNo 2 1行目はタイトル行ではありません ←これ

並べ替えをマクロ記録すると、このHeaderには定数xlGuessがよく記録されます。これは、タイトル行かどうかをExcelが自動判定するという定数ですから、もし、あらかじめタイトル行かどうかが分かっているのなら、明示的にxlYesかxlNoを指定した方が確実です。

大文字と小文字を区別して並べ替えるかどうかを指定するMatchCaseプロパティには、TrueかFalseを指定します。

Orientationプロパティは、並べ替えの方向を表す次の定数を指定します。

定数 数値 意味 既定値
xlTopToBottom 1 上下に並べ替えます ←これ
xlLeftToRight 2 左右に並べ替えます

SortMethodプロパティは、Excel 2003までの並べ替え(Sortメソッド)で指定した、引数SortMethodと同じです。このプロパティ(引数)は何かをヘルプで調べると、次のように書かれています。

【Excel 2003のヘルプ】

並べ替えの種類を指定します

使用できる定数は

xlStroke → 各文字の総画数で並べ替えます

xlPinYin → 中国語の発音表記の順で並べ替えます

【Excel 2010のヘルプ】

中国語の並べ替え方法を指定します

使用できる定数は

xlStroke → 各文字の総画数で並べ替えます

xlPinYin → 中国語の発音表記の順で並べ替えます

「なぁ~んだ、中国語の話アルか。なら、私たち関係ないね」と軽視してはいけません。これは、日本語を並べ替えるとき、ふりがなを使うかどうかを設定するプロパティです。

定数 数値 意味 既定値
xlPinYin 1 日本語をふりがなで並べ替えます ←これ
xlStroke 2 日本語を文字コードで並べ替えます

これらの、並べ替えに関する指定をしたら、Applyメソッドを実行して並べ替えます。

上記で解説した「Header」や「SortMethod」などは、Excel 2003ではSortメソッドの引数でした。メソッドの引数ですから、省略した場合の既定値があります。上の表に書いてある既定値とは、そういう意味です。対して、Excel 2007では、「Header」「Orientation」「SortMethod」はSortオブジェクトのプロパティです。プロパティは値を保持しますから、設定を省略すると、前回の指定が有効になります。誤動作を避けるためにも、必要なプロパティの設定は省略しない方がいいでしょう。

並べ替えの例

以上を踏まえて、並べ替えの例をお見せします。まずは、下図のような表を並べ替えます。

次のコードは、アクティブシートでC列の数値が昇順になるように並べ替えます。

Sub Sample4()
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("C2")
        .SetRange Range("A2:C10")
        .Header = xlNo
        .Apply
    End With
End Sub

A列の日付を降順で並べ替えるには、次のようにします。

Sub Sample5()
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A2"), Order:=xlDescending
        .SetRange Range("A2:C10")
        .Header = xlNo
        .Apply
    End With
End Sub

次は、色で並べ替えます。下図の表は、C列に条件付き書式を設定しています。

この表を、C列を基準として、青色が上、赤色が次に並べ替えます。

Sub Sample6()
    Dim Color1 As Long, Color2 As Long
    Color1 = Range("C2").FormatConditions(1).Interior.Color
    Color2 = Range("C2").FormatConditions(2).Interior.Color
    With ActiveSheet.Sort.SortFields
        .Clear
        .Add( _
            Key:=Range("C2"), _
            SortOn:=xlSortOnCellColor).SortOnValue.Color = Color1
        .Add( _
            Key:=Range("C2"), _
            SortOn:=xlSortOnCellColor).SortOnValue.Color = Color2
    End With
    With ActiveSheet.Sort
        .SetRange Range("A2:C10")
        .Header = xlNo
        .Apply
    End With
End Sub