シートのデータを並べ替える
2021-03-17 00:00:00
ワークシート上のデータの並べ替えを行う方法には、Sortオブジェクトをつかう方法とRangeオブジェクトのSortメソッドをつかう方法の二通りがあります。それぞれの方法について説明したいと思います。
RangeオブジェクトのSortメソッド
マクロの記録を使った場合にはSortオブジェクトを使った方法でマクロが作成されるのですが、Sortメソッドを使ったほうがシンプルなので、先にこちらについて説明します。
この方法で並べ替えるには並べ替えたいデータ範囲をRangeオブジェクトとして取得して、Sortメソッドを実行します。並べ替えの条件はメソッドの引数として指定します。
Sortメソッドのパラメーター
- Key1~3 – 並べ替えフィールド。
- Order1~3 – 並び替え順序。xlAscending、xlDescendingを指定する。
- Header – 最初の行にヘッダーかどうか。 xlNo(既定値)、xlYes、xlGuess を指定する。
- OrderCustom – ユーザー設定の並べ替え順の番号。
- MatchCase – 大文字と小文字を区別する場合はTrue、しない場合はFalseを指定する。
- Orientation – 行で並べ替えるかxlSortRows (既定) 、または列で並べ替えるかxlSortColumnsを指定する。
- SortMethod – 並べ替えの方法。xlPinYin(フリガナ順)、xlStroke(文字コード順)を指定する。
- DataOption1~3 – テキストを並べ替える方法。xlSortNormal、xlSortTextAsNumbersを指定する。
Key1~3には並べ替えに使う行/列の先頭のセルのRangeオブジェクトを指定します。セルに名前がついている場合は名前を引数に指定することもできますが、セルのアドレス(”A1”など)は使えません。Order1~3、Header、MatchCase、Orientationなどは指定しない場合は、前回並び替えした時のものが使われるようなので、なるべく毎回指定したほうがよいかもしれません。OrderCustomを使って独自の並び順を設定するのはちょっと手間がかかるので、その場合Sortオブジェクトを使ったほうがよさそうです。
サンプル
Range("A1:C3").Sort Range("A1"), xlAscending Range("A1:C3").Sort "SORT_KEY1", xlAscending '名前の定義でSORT_KEY1が設定されていると使える Range("A1:C3").Sort "A1", xlAscending 'これはエラーになる Range("A1:C3").Sort key1:=Range("B1"), order1:=xlDescending, Header:=xlYes Range("A1:C3").Sort key1:=Range("A1"), order1:=xlAscending, MatchCase:=True
Sortオブジェクト(Worksheetのプロパティ)
SortオブジェクトはWorksheetオブジェクトのSortプロパティより取得します。Sortメソッドをつかう方法と比べて、4つ以上のフィールドの指定や、セルやフォントの色による並び替え、CustomOrderを指定した並び替えができるというような違いがあります。並べ替えは下の手順で行います。
- SortField(Sortオブジェクトのプロパティ)のClearメソッド実行する。
- SortFieldのAdd(もしくはAdd2)メソッドを使って並び替え条件を設定する。
- SetRangeメソッドにより並び替えの対象範囲を設定する。
- Header、MatchCase、Orientation、SortMethod等のプロパティを設定する。
- Applyメソッドを実行する。
Header、MatchCase、Orientation、SortMethod等のプロパティの値は上記のSortメソッドと同じと考えてよいと思います。Orientationについては、xlSortColumns、xlSortRowsで指定もできますが、マクロの記録ではxlTopToBottom、xlLeftToRightが使われているようです。
SortFieldのAdd2メソッドのパラメータ
(AddメソッドはSubFieldがないだけで、そのほかの機能は同じだと思います。)
- Key – 並べ替えフィールド。
- SortOn – 並べ替えに使う値を指定する。(xlSortOnValues、xlSortOnCellColor、xlSortOnFontColor、xlSortOnIconから選択)
- Order – 並び替え順序。xlAscending、xlDescendingを指定する。
- CustomOrder – ユーザー設定の並べ替え順序を指定する。
- DataOption – テキストを並べ替える方法。xlSortNormal、xlSortTextAsNumbersを指定する。
- SubField – 並べ替えに使う、データのフィールドを指定する。
サンプル
With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Range("A1"), xlSortOnValues, xlAscending .SetRange Range("A1:C3") .Header = xlNo .MatchCase = True .SortMethod = xlPinYin .Apply End With
複数のフィールドを使っての並び替え
With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Range("A1"), xlSortOnValues, xlAscending .SortFields.Add Range("B1"), xlSortOnValues, xlDescending .SetRange Range("A1:C3") .Apply End With
CustomOrderを使った並べ替え
With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Range("A1"), xlSortOnValues, xlAscending, "東京,大阪,名古屋" .SetRange Range("A1:A10") .Apply End With