複数列を基準に並び替える

タイトルのマクロは、以下です。

' 複数列で並び替える
' 並び替えの基準を「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つ以上の基準で並べ替えは可能となります。

Follow me!