【VBA】データの並び替え(ソート)をする【SORT】

データの並び替え(ソート)をする方法として
 ・RangeオブジェクトのSortメソッド
 ・Sortオブジェクト
の2種類があります!

この記事では
 ・Sortオブジェクトを使用した並び替え(ソート)方法
を記載します!
※Sortオブジェクトの方が便利であるため。
※Sortオブジェクトは4列以上の並び替え(ソート)ができます。
※RangeオブジェクトのSortメソッドは3列までしか並び替え(ソート)できません。

PR

VBAコード

ここでは例として、
 ・シート「sample」のセル「B2」から続く一連の範囲の表の
 ・1列目、2列目、3列目で並び替え(ソート)
をします。

セル「B2」から続く一連の範囲の表
セル「B2」から続く一連の範囲の表
Option Explicit

Sub dataSort()
    
    Dim ws As Worksheet
    Dim targetRanges As Range
    
    '並び替え(ソート)したい表があるシートを取得
    Set ws = Worksheets("sample")
    
    '並び替え(ソート)の表の範囲を取得
    Set targetRanges = ws.Range("B2").CurrentRegion
    
    With ws.Sort.SortFields
        '並び替え(ソート)の設定をクリア
        .Clear
        '表の1列目で並び替え(ソート)
        .Add Key:=targetRanges.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending
        '表の2列目で並び替え(ソート)
        .Add Key:=targetRanges.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending
        '表の3列目で並び替え(ソート)
        .Add Key:=targetRanges.Columns(3), SortOn:=xlSortOnValues, Order:=xlAscending
    End With
    
    With ws.Sort
        '並び替え(ソート)の表の範囲を設定
        .SetRange targetRanges
        '最初の行がヘッダーである旨を指定
        .Header = xlYes
        '並べ替えの方向を指定
        .Orientation = xlSortColumns
        '並び替え(ソート)を実行
        .Apply
    End With
    
End Sub

「Range(“B2”).CurrentRegion」により、セル「B2」から続く一連の範囲を取得できます(12行目)。

「Worksheetオブジェクト」の「Sort」プロパティにより、「Sort オブジェクト」を取得します(14行目)。

「Sort オブジェクト」の「SortFields」プロパティにより、「SortFieldsオブジェクト」を取得します(14行目)。

「SortFieldsオブジェクト」の「Clear」メソッドにより、並び替え(ソート)の設定をクリアします(16行目)。

「SortFieldsオブジェクト」の「Add」メソッドにより、並び替え(ソート)の設定をします(18、20、22行目)。

※Key  :「表の列」を指定します。
SortOn:「並び替え(ソート)のルール」を指定します。
※Order
 :「昇順 or 降順」を指定します。 

例)「Columns(1)」は1列目。
例)「xlSortOnValues」は「値で並び替え(ソート)」
例)「xlAscending」は「昇順」

「Sort オブジェクト」の「SetRange」メソッドにより、並び替え(ソート)の表の範囲を設定します(27行目)。

「Sort オブジェクト」の「Apply」メソッドにより、並び替え(ソート)を実行します(33行目)。

PR

実行結果

データの並び替え(ソート)ができました。

並び替え(ソート)の実行前
並び替え(ソート)の実行
並び替え(ソート)の実行後
並び替え(ソート)の実行
PR

参考①

「ソート(並び替え)されたリスト」の作成もできます。

詳細は以下の記事をご確認ください。

PR

参考②

単純に配列をソート(並び替え)することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Worksheetオブジェクト」の「Sort」プロパティ


●「Sort オブジェクト」のメソッド、プロパティ


●「SortFieldsオブジェクト」のメソッド、プロパティ


●「SortFieldsオブジェクト」の「Add」メソッドの「並び替え(ソート)のルール」


●「SortFieldsオブジェクト」の「Add」メソッドの「昇順 or 降順」