あるセル範囲内をソートしたい場合は Sort メソッドを使用します。ソートキーは3つまで指定することができます。その他、並びの昇順・降順や見出しの有無などを引数で指定することができます。
ソート範囲の指定には 矩形セル範囲(CurrentRegion) や 使用済みセル範囲(UsedRange)、セル終端(End プロパティ)などを状況に応じて使い分けるとよいでしょう。
Sortメソッドの使用方法
引数名 | 省略 | 定数/データ型 | 説明 |
---|---|---|---|
Key1~3 | ○ | Variant型 | 最初の並べ替えフィールドを範囲名 (文字列) または Range オブジェクトで指定します。 |
Order1~3 | ○ | xlAscending | Key で指定したフィールドを昇順で並べ替えます。 (既定値) |
xlDescending | Key で指定したフィールドを降順で並べ替えます。 | ||
Type | ○ | Variant型 | 並べ替える要素を指定します。 |
Header | ○ | xlGuess | 見出しがあるかどうか、Excel が判断します。 |
xlYes | 先頭行を見出しとし、先頭行以外を並べ替えの対象とします。 | ||
xlNo | 範囲全体が並べ替えの対象になります。 (既定値) | ||
OrderCustom | ○ | Variant型 | ユーザー設定の並べ替え順のリスト内の番号を示す、1 から始まる整数を指定します。 |
MatchCase | ○ | True | 大文字と小文字を区別して並べ替えを行います。 |
False | 大文字と小文字を区別しないで並べ替えを行います。(既定値) | ||
Orientation | ○ | xlSortColumns | 列単位で並べ替えます |
xlSortRows | 行単位で並べ替えます。 (既定値) | ||
SortMethod | ○ | xlPinYin | 日本語のふりがなの順で並べ替えます。 (既定値) |
xlStroke | 文字コードの順で並べ替えます。 | ||
DataOption1~3 | ○ | xlSortNormal | 数値データとテキスト データを別々に並べ替えます。 (既定値) |
xlSortTextAsNumbers | テキストを数値データとして並べ替えます。 |
Sortメソッドの使用例
固定範囲のソート
ソート範囲がA3~F13セル固定の場合のソート使用例です。ソートキーは『順位』(昇順)で先頭行は見出しという設定です。
Sub sample6_39()
'固定範囲のソート例
Range("A3:F13").Sort _
Key1:=Range("F3"), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
可変範囲のソート
ソート範囲の行が固定でない場合のソート例です。最終行は End プロパティで取得しています。ソートの設定は使用例1と同じです。
Sub sample6_40()
Const Title_ROW = 3 '見出し行
Const MiseNo_COL = 1 '列番号
Const Sum1_COL = 2
Const Sum2_COL = 3
Const Sum3_COL = 4
Const Total_COL = 5
Const Rank_COL = 6
Dim lastRow As Long '最終行
'最終行取得
lastRow = Cells(Rows.Count, MiseNo_COL).End(xlUp).Row
'取得した最終行のチェック
If lastRow <= Title_ROW Then
MsgBox "明細行なし。", vbExclamation
End '処理終了
End If
'ソート
Range(Cells(Title_ROW, MiseNo_COL), Cells(lastRow, Rank_COL)).Sort _
Key1:=Cells(Title_ROW, Rank_COL), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
UsedRangeで範囲取得
シート内にソート対象データしか存在しない場合、ワークシートの UsedRange プロパティが便利です。
ソートキーは『3月』(降順)で先頭行は見出しという設定です。
Sub sample6_41()
'シート内にソート対象データしか存在しない場合
ActiveSheet.UsedRange.Sort _
Key1:=Range("D1"), _
Order1:=xlDescending, _
Header:=xlYes
End Sub