Excel VBAでデータを並び変える(ソート)

2020年5月6日

Excelで作業を自動化するためには、頻繁に行うデータの並べ替えもVBAを使ってプログラミングする必要があります。今回は3つのデータ項目を並び替えるサンプルアプリを紹介します。
データの並べ替えは、値による昇順・降順や列方向・行方向の並べ替えだけでなく、セルの色やフォントの色さらには大文字・小文字などあらゆる角度から並べ替えを行うことができます。

データを並び替えるサンプルアプリの説明

赤枠の「並べ替え(ソート)実行」ボタンを押すと、表の項目1~項目3の優先順位でデータが並べ替えられます。

サンプルアプリのソースコード  コードの作成手順はこちら

Sub ボタン1_Click()

'Sortプロパティを使用してSortオブジェクトを取得し、Withステートメントで指定します。
With ActiveSheet '対象シートをアクティブにする

    'SortFieldsコレクションのClearメソッドで前回の並べ替えの設定をクリアします。
    .Sort.SortFields.Clear
            
    'SortFieldsコレクションのAddメソッドで並び替え対象を指定します。並び替えの優先順位が高い順から宣言します。
    '項目1
    .Sort.SortFields.Add _
        Key:=ActiveSheet.Cells(5, 2), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
        
    '項目2
    .Sort.SortFields.Add _
        Key:=ActiveSheet.Cells(5, 3), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    
    '項目3
    .Sort.SortFields.Add _
        Key:=ActiveSheet.Cells(5, 4), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
        
    With .Sort '並び替えを実行する
    
        'SortオブジェクトのSetRangeメソッドに並べ替えるセル範囲を指定します。
        .SetRange Range(Cells(5, 2), Cells(17, 4))
        
        'SortオブジェクトのHeaderプロパティに1行目を見出し行として設定する「xlYes」を指定します。
        .Header = xlYes
        
        '大文字と小文字を区別するかしないかを指定します。「False」を指定し区別をしないように設定します。
        .MatchCase = False
        
        '行方向(上から下)の並べ替えを指定します。
        .Orientation = xlTopToBottom
        
        'ふりがな順に並べ替えます。
        .SortMethod = xlPinYin
        
        'SortオブジェクトのApplyメソッドで並べ替えを実行します。
        .Apply
    
    End With
  
End With

End Sub

SortFields.Addメソッドの説明

SortFields.Addメソッドの引数を設定することによりソートの列や方法を指定することができます。

  オブジェクト.Add( Key, [SortOn, Order, CustomOrder, DataOption] )

●Key【キー】(必須)
 並べ替えの基準とするフィールド(列)のセルまたは列をRangeオブジェクトで指定します。

●SortOn【ソートオン】(省略可)
 並べ替えの基準をXlSortOn列挙型の定数で指定します。
  SortOnValues  0 値(既定値)
  SortOnCellColor 1 セルの色
  SortOnFontColor 2 フォントの色
  SortOnIcon    3 アイコン

●Order【オーダー】(省略可)
 並べ替えの順序をXlSortOrder列挙型の定数で指定します。
  xlAscending 1 昇順で並べ替えます。(既定値)
 xlDescending 2 降順で並べ替えます。

●CustomOrder【カスタムオーダー】(省略可)
 ユーザー定義の並べ替えの順番を文字列で指定するか「ユーザー設定リスト」ダイアログボックスのリスト上からの順番を数値で指定します。

●DataOption【データオプション】(省略可)
 テキストを並べ替える方法をXlSortDataOption列挙型の定数で指定します。
 xlSortNormal(既定値) 0 数値データとテキスト データを別々に並べ替えます。
 xlSortTextAsNumbers 1 テキストを数値データとして並べ替えます。

Sort オブジェクトのメソッドとプロパティ

●SetRange【セットレンジ】メソッド
 並べ替えるセル範囲をRangeオブジェクトで指定します。

●Header【ヘッダー】プロパティ
 指定範囲の1行目を見出しとするかどうかをXlYesNoGuess列挙型の定数で設定します。値の設定と取得ができます。
 xlGuess 0 見出しがあるかどうか Excel が判断します。
 xlYes  1 1行目を見出しとして1行目を除いた指定範囲を並べ替えます。

●MatchCase【マッチケース】プロパティ
 大文字と小文字を区別するかしないかを指定します。値の設定と取得ができます。
 False   区別しない(既定値)
 True   区別する

●Orientation【オリエンティーション】プロパティ
 並べ替えの単位をXlSortOrientation列挙型の定数で指定します。値の設定と取得ができます。
 xlTopToBottom または xlSortColumns 1 既定値。行方向(上から下)の並べ替えになります
 xlLeftToRight または xlSortRows    2 列方向(左から右)の並べ替えになります

●SortMethod【ソートメソッド】プロパティ
 日本語の並べ替えの方法をXlSortMethod列挙型の定数で指定します。値の設定と取得ができます。
 xlPinYin 1 ふりがな順に並べ替え(既定値)
 xlStroke 2 各文字の総画数で並べ替え

●Apply【アプリ】メソッド
 並べ替えを実行します。