今回は「Sort」オブジェクトを使用して、シート上のデータを並び替えする方法をご紹介します。
並び替えは見た目の順番を変えるだけではなく、本領を発揮するのは膨大なデータの前処理など、処理時間が長くなってしまう処理なども並び替えを組み込むことで高速化する事も可能なところではないかと思います。
下記で説明する定数はデフォルト値を赤文字にしています。
今回紹介する方法はExcel2007以降で使用できます。
1.Sortオブジェクトで並び替えをする方法
Sortオブジェクトで並び替えする方法は、Excel2007から「SortFieldオブジェクト」で条件を指定して、「Sortオブジェクト」で条件に合わせて並び替えをします。
並び替えは次の手順で行います。
シートに依存するため、シートをアクティブにしないと意図しない並び替えとなります。
- シートをアクティブにする
- 並び替え条件をクリア
- 「SortFieldオブジェクト」で条件を指定
- 「Sortオブジェクト」で条件に合わせて並び替え
2.並び替え条件をクリア
まず、「SortFieldオブジェクト」で条件を指定する前に、条件をクリアする必要があります。
理由はもともと条件に指定されてた場合、その条件に新たに指定した条件が追加されてしまうためです。
ActiveSheet.Sort.SortFields.Clear
3.「SortFieldオブジェクト」で条件を指定する
条件をクリアしたら、次は条件を指定します。
「Sort.SortFields.Add」で条件を追加して、各引数で並び替えの詳細を設定します。
下記コードが条件指定の基本となりますので、こちらも覚えておいた方が良いです。
ActiveSheet.Sort.SortFields.Add _
Key:=ActiveSheet.Cells(1, 1), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
「Key」で並び替えの基準となるセルを指定します。
「SortOn」で 並べ替えのタイプを指定します。
「Order」で並べ替えの順序を指定します。
「DataOption」で数値と文字列の並べ替え基準を指定します。
上記でも説明していますが、引数の一覧です。
引数名 | 必須/省略 | 説明 |
Key | 必須 | 並べ替えの基準セルを指定します。 |
SortOn | 省略可能 | 並べ替えのタイプを指定します。 |
Order | 省略可能 | 並べ替えの順序を指定します。 |
CustomOrder | 省略可能 | ユーザー設定の並べ替え順序を指定します。 |
DataOption | 省略可能 | 数値と文字列の並べ替え基準を指定します。 |
SortOnの定数
引数「SortOn」は並び替えを何で行うかを指定します。
次の定数が用意されています。
デフォルトは「xlSortOnValues」のデータで並び替えです。
定数 | 数値 | 意味 |
xlSortOnValues | 0 | データで並べ替え |
xlSortOnCellColor | 1 | 背景色で並べ替え |
xlSortOnFontColor | 2 | 文字色で並べ替え |
xlSortOnIcon | 3 | 条件付き書式のアイコンで並べ替え |
Orderの定数
引数「Order」は並べ替えの昇順と降順を指定します。
重要な定数になりますので、覚えておいた方が良いです。
デフォルトでは「xlAscending(昇順)」となります。
定数 | 数値 | 意味 |
xlAscending | 1 | 昇順で並び替え |
xlDescending | 2 | 降順で並び替え |
DataOptionの定数
引数「DataOption」は数値と文字列の並べ替え基準を指定します。
定数 | 数値 | 意味 |
xlSortNormal | 0 | 数値とテキストを別々に並べ替えます。 |
xlSortTextAsNumbers | 1 | テキストを数値データとして並べ替えます。 |
4.「Sortオブジェクト」で条件に合わせて並び替え
条件を指定したら、最後は「Sortオブジェクト」で並び替えをします。
「SetRange」で並び替えをするデータ範囲を指定します。
「Apply」で指定した条件で並び替えを実行します。
With ActiveSheet.Sort
.SetRange Range(Cells(1, 1), Cells(10, 3))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sortオブジェクトの引数は次の通りです。
引数名 | 必須/省略 | 説明 |
Header | 省略可能 | 先頭行をタイトルにするか指定します。 |
MatchCase | 省略可能 | 大文字と小文字を区別するか指定します。 |
Orientation | 省略可能 | 並び替えの方向を指定します。 |
SortMethod | 省略可能 | ふりがなを使うか指定します。 |
Headerの定数
「Header」は1行目をタイトルとするか指定します。
定数 | 数値 | 意味 |
xlGuess | 0 | タイトル行か自動設定します。 |
xlNo | 2 | タイトル行に指定しません。 |
xlYes | 1 | タイトル行に指定します。 |
Orientationの定数
「Orientation」は並び替えの方向を指定します。
定数 | 数値 | 意味 |
xlTopToBottom | 1 | 行方向の並べ替えます。 |
xlLeftToRight | 2 | 列方向の並べ替えます。 |
SortMethodの定数
「SortMethod」をふりがなを使うか指定します。
定数 | 数値 | 意味 |
xlPinYin | 1 | ふりがなを使う。 |
xlStroke | 2 | ふりがなを使わない。 |
5.並び替えサンプルコード
説明が長くなりましたが、サンプルデータとサンプルコードです。
実際にコードにしてみると意外とシンプルですので、難しくありません。
サンプルデータ
日付がバラバラに並んでるA店舗~D店舗の売上の表を使用します。
サンプルコード
上記の表をA列の日付昇順で並び替えます。
Sub Sample1()
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add _
Key:=ActiveSheet.Cells(1, 1), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange Range(Cells(1, 1), Cells(13, 5))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub