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