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