ソートとは
ソートとは数値や文字列のデータ群などを順番に並べ替えることをいいます。小さい値から大きい値に順番に並べ替える昇順、降順は大きい値から小さい値に並べ替えます。VBAでExcelのソート機能を利用することができます。ソート機能を利用するにはRangeオブジェクトのSortメソッドを使用します。またExcel2007以降であればSortオブジェクトが使用できます。
RangeオブジェクトのSortメソッドを使う
Sortメソッドでは、ソートキーは3つまで指定できます。データ群の並びの昇順・降順や見出しの有無などを引数で指定することができます。
Sortメソッドの設定一覧
| 引数名 | 定数 | 説明 |
| Key1~3 | 並べ替えフィールドを範囲名(文字列)または Range オブジェクトで指定 | |
| Order1~3 | xlAscending xlDescending | Keyで指定したフィールドを昇順で並べ替え Keyで指定したフィールドを降順で並べ替え |
| Type | ピボットテーブルを並び替えるときに指定 | |
| Header | xlGuess xlYes xlNo | 先頭行をタイトルかどうかExcel が自動判断 先頭行をタイトルとし、先頭行以外を並べ替えの対象 タイトルなしとして範囲全体が並べ替えの対象 |
| OrderCustom | ユーザー設定の並べ替え | |
| SortMethod | xlPinYin xlStroke | 日本語をふりがな順で並べ替え 日本語を文字コードで並べ替え |
| MatchCase | True False | 大文字と小文字を区別して並べ替え 大文字と小文字を区別しないで並べ替え |
| Orientation | xlSortRows xlSortColumns | 行(縦方向)で並べ替え 列(横方向)で並べ替え |
| DataOption 1~3 | xlSortNormal xlSortTextAsNumbers | 数値データとテキスト データを別々に並べ替え テキストを数値データとして並べ替え |
Sortメソッドで並べ替えのマクロ例
Sub 並べ替え_1()Sort.SortFields.Clear'1Range("b7:m24).Sort _Key1:=Range("e7"), Order1:=xlAscending, _Header:=xlNoEnd Sub
せつめい
- 最初に「Clear」しないと、それまでの並べ替え条件に新しい条件が追加されます
- 赤く記した「 _ 」アンダーバーはコードを2行に分ける時にタイプします。長い一つの命令文を1行で書くより行を変えた方が見やすくなります。「, _ 」カンマとアンダーバーの間に半角スペースを入れます
- 並べ替えフィールドをe7、昇順、先頭行を見出しとしないで範囲内を並べ替えの対象としました
Sortオブジェクト
Excel2007以降のバージョンはSortオブジェクトが使えるようになりました。Sortオブジェクトではプロパティでソートの設定を行います。Applyメソッドで現在適用されている並べ替え状態に基づいて範囲を並べ替えます。
Sort オブジェクトの主なプロパティ
- Sort.Header
1行目がタイトル行かどうかを指定するHeaderプロパティには、次の定数を指定します。
| 定数 | 値 | 説明 |
| xlGuess | 0 | 先頭行をタイトルかどうかExcel が自動判断 |
| xlYes | 1 | 先頭行をタイトルとし、先頭行以外を並べ替えの対象 |
| xlNo | 2 | タイトルなしとして範囲全体が並べ替えの対象 |
- Sort.MatchCase
大文字と小文字を区別して並べ替えるかどうかを指定するMatchCaseプロパティは、区別する場合はTrue、しない場合はFalseを指定します。 - Sort.Orientation
Orientationプロパティは、並べ替えの方向を表す次の定数を指定します。
| 定数 | 値 | 説明 |
| xlTopToBottom | 1 | 行(縦方向)で並べ替え |
| xlLeftToRight | 2 | 列(横方向)で並べ替え |
- Sort.SortMethod
日本語を並べ替えるとき、ふりがなを使うかどうかを設定するプロパティです。
| 定数 | 値 | 説明 |
| xlPinYin | 1 | 日本語をふりがなで並べ替え |
| xlStroke | 2 | 日本語を文字コードで並べ替え |
Sortオブジェクトで並べ替えのマクロ例
Sub 並べ替え_2()With ActiveSheet.Sort.SortFields.Clear.SortFields.Add Key:=Range("e7")'並べ替える範囲を指定.SetRange Range("b7:m24") '並べ替える範囲を指定.Header = xlNo '1行目がタイトル行かどうかを指定.Orientation = xlTopToBottom '並べ替えの方向(行/列)を指定.Apply '並べ替えを実行End WithEnd Sub
「オリジナルの出馬表を作成」で使ったマクロを比較する
- Sortメソッドを使ったケース
With ws2
.Sort.SortFields.Clear
.Range(.Cells(7, "b"), .Cells(tosu + 6, "m")).Sort _
Key1:=.Range("e7"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1
End With
- Sortオブジェクトを使ったケース
With ws2
Set myRng = .Range(.Cells(7, "b"), .Cells(tosu + 6, "m"))
End With
With ws2.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("e7"), _
Order:=xlAscending
.SetRange myRng
.Header = xlNo
.Orientation = xlTopToBottom
.Apply
End With
この2つのマクロを比較すると、Sortメソッドを使ったほうがコンパクトになるようですが、まだ未熟だからでしょうか。

