複数列を基準に並び替える
タイトルのマクロは、以下です。
' 複数列で並び替える
' 並び替えの基準を「A列 > B列 > C列 > D列」で設定
' Excel2007以降のSortを使用。
Sub MultiColumnSort()
Dim ws As Worksheet
Dim rngSort As Range
' ソート対象のシートを設定
Set ws = ThisWorkbook.Worksheets("Sheet1")
' ソート範囲を指定
Set rngSort = ws.Range("A1").CurrentRegion
' ソートを実行
With ws.Sort
.SortFields.Clear ' 一旦ソート条件をクリア
' 並び替えの基準を「A列 > B列 > C列 > D列」で設定
' SortOn:=xlSortOnValues:データで並べ替え
' Order:=xlAscending:昇順。xlDescending:降順
' DataOption:=xlSortNormal:数値と文字列を別々に並べ替え。xlSortTextAsNumbers:文字列を数値とみなして並べ替え
.SortFields.Add2 Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add2 Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add2 Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add2 Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange rngSort ' 並べ替えが行われるセルの範囲
.Header = xlYes ' ヘッダーがある場合はxlYes、ない場合はxlNo
.MatchCase = False ' 大文字と小文字を区別せず。 True:区別して検索
.Orientation = xlTopToBottom ' 行単位。 xlLeftToRight:列単位
.SortMethod = xlPinYin ' ふりがなを使う。 xlStroke:ふりがなを使わない。
.Apply
End With
End Sub
ここで使用しているExcel2007以降のSortは、並べ替えの基準の数は最大64個であり、実質的には無制限です。
一方、Excel2003までのSortは、並べ替えのキーが3つまでしか指定できません。しかし、一気に並び替えなくても、
・D列で並べ替え
・C列で並べ替え
・B列で並べ替え
・A列で並べ替え
と1列づつ並べ替えても結果は同じです。つまり、Excel2003までのSortでも、4つ以上の基準で並べ替えは可能となります。