Excel VBA Sort(ソート)でデータを並び替えする

ExcelVBA-基礎編

今回は「Sort」オブジェクトを使用して、シート上のデータを並び替えする方法をご紹介します。

並び替えは見た目の順番を変えるだけではなく、本領を発揮するのは膨大なデータの前処理など、処理時間が長くなってしまう処理なども並び替えを組み込むことで高速化する事も可能なところではないかと思います。

下記で説明する定数はデフォルト値を赤文字にしています。

今回紹介する方法はExcel2007以降で使用できます。

1.Sortオブジェクトで並び替えをする方法

Sortオブジェクトで並び替えする方法は、Excel2007から「SortFieldオブジェクト」で条件を指定して、「Sortオブジェクト」で条件に合わせて並び替えをします。

並び替えは次の手順で行います。

シートに依存するため、シートをアクティブにしないと意図しない並び替えとなります。

  • シートをアクティブにする
  • 並び替え条件をクリア
  • 「SortFieldオブジェクト」で条件を指定
  • 「Sortオブジェクト」で条件に合わせて並び替え

2.並び替え条件をクリア

まず、「SortFieldオブジェクト」で条件を指定する前に、条件をクリアする必要があります。

理由はもともと条件に指定されてた場合、その条件に新たに指定した条件が追加されてしまうためです。

ActiveSheet.Sort.SortFields.Clear

3.「SortFieldオブジェクト」で条件を指定する

条件をクリアしたら、次は条件を指定します。

Sort.SortFields.Add」で条件を追加して、各引数で並び替えの詳細を設定します。

下記コードが条件指定の基本となりますので、こちらも覚えておいた方が良いです。

ActiveSheet.Sort.SortFields.Add _
            Key:=ActiveSheet.Cells(1, 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal

Key」で並び替えの基準となるセルを指定します。

SortOn」で 並べ替えのタイプを指定します。

Order」で並べ替えの順序を指定します。

DataOption」で数値と文字列の並べ替え基準を指定します。

上記でも説明していますが、引数の一覧です。

引数名必須/省略説明
Key必須並べ替えの基準セルを指定します。
SortOn省略可能並べ替えのタイプを指定します。
Order省略可能並べ替えの順序を指定します。
CustomOrder省略可能ユーザー設定の並べ替え順序を指定します。
DataOption省略可能数値と文字列の並べ替え基準を指定します。

SortOnの定数

引数「SortOn」は並び替えを何で行うかを指定します。

次の定数が用意されています。

デフォルトは「xlSortOnValues」のデータで並び替えです。

定数数値意味
xlSortOnValues0データで並べ替え
xlSortOnCellColor1背景色で並べ替え
xlSortOnFontColor2文字色で並べ替え
xlSortOnIcon3条件付き書式のアイコンで並べ替え

Orderの定数

引数「Order」は並べ替えの昇順と降順を指定します。

重要な定数になりますので、覚えておいた方が良いです。

デフォルトでは「xlAscending(昇順)」となります。

定数数値意味
xlAscending昇順で並び替え
xlDescending降順で並び替え

DataOptionの定数

引数「DataOption」は数値と文字列の並べ替え基準を指定します。

定数数値意味
xlSortNormal0数値とテキストを別々に並べ替えます。
xlSortTextAsNumbers1テキストを数値データとして並べ替えます。

4.「Sortオブジェクト」で条件に合わせて並び替え

条件を指定したら、最後は「Sortオブジェクト」で並び替えをします。

SetRange」で並び替えをするデータ範囲を指定します。

Apply」で指定した条件で並び替えを実行します。

With ActiveSheet.Sort
            .SetRange Range(Cells(1, 1), Cells(10, 3))
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

Sortオブジェクトの引数は次の通りです。

引数名必須/省略説明
Header 省略可能先頭行をタイトルにするか指定します。
MatchCase 省略可能大文字と小文字を区別するか指定します。
Orientation 省略可能並び替えの方向を指定します。
SortMethod 省略可能ふりがなを使うか指定します。

Headerの定数

Header」は1行目をタイトルとするか指定します。

定数数値意味
xlGuess0タイトル行か自動設定します。
xlNo 2タイトル行に指定しません。
xlYes1タイトル行に指定します。

Orientationの定数

Orientation」は並び替えの方向を指定します。

定数数値意味
xlTopToBottom1行方向の並べ替えます。
xlLeftToRight2列方向の並べ替えます。

SortMethodの定数

SortMethod」をふりがなを使うか指定します。

定数数値意味
xlPinYin1ふりがなを使う。
xlStroke2ふりがなを使わない。

5.並び替えサンプルコード

説明が長くなりましたが、サンプルデータとサンプルコードです。

実際にコードにしてみると意外とシンプルですので、難しくありません。

サンプルデータ

日付がバラバラに並んでるA店舗~D店舗の売上の表を使用します。

サンプルコード

上記の表をA列の日付昇順で並び替えます。

Sub Sample1()


With ActiveSheet
    
    .Sort.SortFields.Clear
    
    .Sort.SortFields.Add _
        Key:=ActiveSheet.Cells(1, 1), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
        
    With .Sort
        .SetRange Range(Cells(1, 1), Cells(13, 5))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        
    End With
    
End With

End Sub
タイトルとURLをコピーしました