データの並べ替え

スポンサーリンク
ソートとは

ソートとは数値や文字列のデータ群などを順番に並べ替えることをいいます。小さい値から大きい値に順番に並べ替える昇順、降順は大きい値から小さい値に並べ替えます。VBAでExcelのソート機能を利用することができます。ソート機能を利用するにはRangeオブジェクトのSortメソッドを使用します。またExcel2007以降であればSortオブジェクトが使用できます。

RangeオブジェクトのSortメソッドを使う

 Sortメソッドでは、ソートキーは3つまで指定できます。データ群の並びの昇順・降順や見出しの有無などを引数で指定することができます。

Sortメソッドの設定一覧
引数名定数説明
Key1~3並べ替えフィールドを範囲名(文字列)または
Range オブジェクトで指定
Order1~3xlAscending
xlDescending
Keyで指定したフィールドを昇順で並べ替え
Keyで指定したフィールドを降順で並べ替え
Typeピボットテーブルを並び替えるときに指定
HeaderxlGuess
xlYes
xlNo
先頭行をタイトルかどうかExcel が自動判断
先頭行をタイトルとし、先頭行以外を並べ替えの対象
タイトルなしとして範囲全体が並べ替えの対象
OrderCustomユーザー設定の並べ替え
SortMethodxlPinYin
xlStroke
日本語をふりがな順で並べ替え
日本語を文字コードで並べ替え
MatchCaseTrue
False
大文字と小文字を区別して並べ替え
大文字と小文字を区別しないで並べ替え
OrientationxlSortRows
xlSortColumns
行(縦方向)で並べ替え
列(横方向)で並べ替え
DataOption
1~3
xlSortNormal
xlSortTextAsNumbers
数値データとテキスト データを別々に並べ替え
テキストを数値データとして並べ替え

Sortメソッドで並べ替えのマクロ例

Sub 並べ替え_1()
Sort.SortFields.Clear                                '1
Range("b7:m24).Sort _                                
Key1:=Range("e7"), Order1:=xlAscending, _
Header:=xlNo
End Sub
せつめい
  1. 最初に「Clear」しないと、それまでの並べ替え条件に新しい条件が追加されます
  2. 赤く記した「 _ 」アンダーバーはコードを2行に分ける時にタイプします。長い一つの命令文を1行で書くより行を変えた方が見やすくなります。「, _ 」カンマとアンダーバーの間に半角スペースを入れます
  3. 並べ替えフィールドをe7、昇順、先頭行を見出しとしないで範囲内を並べ替えの対象としました
Sortオブジェクト

Excel2007以降のバージョンはSortオブジェクトが使えるようになりました。Sortオブジェクトではプロパティでソートの設定を行います。Applyメソッドで現在適用されている並べ替え状態に基づいて範囲を並べ替えます。

Sort オブジェクトの主なプロパティ
  • Sort.Header
    1行目がタイトル行かどうかを指定するHeaderプロパティには、次の定数を指定します。
定数説明
xlGuess0先頭行をタイトルかどうかExcel が自動判断
xlYes1先頭行をタイトルとし、先頭行以外を並べ替えの対象
xlNo2タイトルなしとして範囲全体が並べ替えの対象
  • Sort.MatchCase
    大文字と小文字を区別して並べ替えるかどうかを指定するMatchCaseプロパティは、区別する場合はTrue、しない場合はFalseを指定します。
  • Sort.Orientation
    Orientationプロパティは、並べ替えの方向を表す次の定数を指定します。
定数説明
xlTopToBottom1行(縦方向)で並べ替え
xlLeftToRight2列(横方向)で並べ替え
  • Sort.SortMethod
    日本語を並べ替えるとき、ふりがなを使うかどうかを設定するプロパティです。
定数説明
xlPinYin1日本語をふりがなで並べ替え
xlStroke2日本語を文字コードで並べ替え

Sortオブジェクトで並べ替えのマクロ例

Sub 並べ替え_2()
 With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("e7")  '並べ替える範囲を指定
.SetRange Range("b7:m24")        '並べ替える範囲を指定
.Header = xlNo                   '1行目がタイトル行かどうかを指定
.Orientation = xlTopToBottom     '並べ替えの方向(行/列)を指定
.Apply                           '並べ替えを実行
End With
 End Sub
「オリジナルの出馬表を作成」で使ったマクロを比較する
  • Sortメソッドを使ったケース
        With ws2
         .Sort.SortFields.Clear                
         .Range(.Cells(7, "b"), .Cells(tosu + 6, "m")).Sort _
             Key1:=.Range("e7"), Order1:=xlAscending, _
             Header:=xlNo, OrderCustom:=1
         End With
  • Sortオブジェクトを使ったケース
                   With ws2
                     Set myRng = .Range(.Cells(7, "b"), .Cells(tosu + 6, "m"))
                    End With
                     
                         With ws2.Sort
                             .SortFields.Clear
                             .SortFields.Add Key:=Range("e7"), _
                                 Order:=xlAscending
                                     .SetRange myRng
                                     .Header = xlNo
                                     .Orientation = xlTopToBottom
                                     .Apply
                         End With 

この2つのマクロを比較すると、Sortメソッドを使ったほうがコンパクトになるようですが、まだ未熟だからでしょうか。

コメント

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