セルのSortメソッド

あるセル範囲内をソートしたい場合は Sort メソッドを使用します。ソートキーは3つまで指定することができます。その他、並びの昇順・降順や見出しの有無などを引数で指定することができます。

ソート範囲の指定には 矩形セル範囲(CurrentRegion)使用済みセル範囲(UsedRange)セル終端(End プロパティ)などを状況に応じて使い分けるとよいでしょう。

スポンサーリンク

Sortメソッドの使用方法

構文
object.Sort [Key1] [, Order1] [, Key2] [, Type] [, Order2] [, Key3] [, Order3] _
            [, Header] [, OrderCustom] [, MatchCase] [, Orientation] [, SortMethod] _
            [, DataOption1] [, DataOption2] [, DataOption3]

※objectはセルまたはレンジオブジェクトを表す変数

引数名 省略 定数/データ型 説明
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
sample6_39の実行前
sample6_39の実行前
sample6_39の実行後
sample6_39の実行後

可変範囲のソート

ソート範囲の行が固定でない場合のソート例です。最終行は 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

 Endプロパティ Endステートメント

sample6_40の実行前
sample6_40の実行前
sample6_40の実行後
sample6_40の実行後

UsedRangeで範囲取得

シート内にソート対象データしか存在しない場合、ワークシートの UsedRange プロパティが便利です。
ソートキーは『3月』(降順)で先頭行は見出しという設定です。

Sub sample6_41()
'シート内にソート対象データしか存在しない場合
    ActiveSheet.UsedRange.Sort _
        Key1:=Range("D1"), _
        Order1:=xlDescending, _
        Header:=xlYes
End Sub

 ワークシート内の使用済み領域(UsedRange)

sample6_41の実行前
sample6_41の実行前
sample6_41の実行後
sample6_41の実行後
タイトルとURLをコピーしました