VBAオジサンのらくがき帳

シートのデータを並べ替える

2021-03-17 00:00:00

ワークシート上のデータの並べ替えを行う方法には、Sortオブジェクトをつかう方法とRangeオブジェクトのSortメソッドをつかう方法の二通りがあります。それぞれの方法について説明したいと思います。

RangeオブジェクトのSortメソッド

マクロの記録を使った場合にはSortオブジェクトを使った方法でマクロが作成されるのですが、Sortメソッドを使ったほうがシンプルなので、先にこちらについて説明します。

この方法で並べ替えるには並べ替えたいデータ範囲をRangeオブジェクトとして取得して、Sortメソッドを実行します。並べ替えの条件はメソッドの引数として指定します。

Sortメソッドのパラメーター

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を指定した並び替えができるというような違いがあります。並べ替えは下の手順で行います。

Header、MatchCase、Orientation、SortMethod等のプロパティの値は上記のSortメソッドと同じと考えてよいと思います。Orientationについては、xlSortColumns、xlSortRowsで指定もできますが、マクロの記録ではxlTopToBottom、xlLeftToRightが使われているようです。

SortFieldのAdd2メソッドのパラメータ

(Addメソッドは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