並べ替え(Sort オブジェクト, SortFields コレクション)
2015/08/26
Sort オブジェクトによる並べ替え
Excel 2007 以降のバージョンでのみ使用可能です。(これ以前の Excel では、Sort メソッド を使用します。)
    Sort オブジェクト は、Sort メソッド から機能が拡張されています。また、操作方法も変わっています。
    まず、並べ替えを行いたい範囲の Sort オブジェクト を取得します。Sort オブジェクト の SortFields コレクション を取得し、並べ替えの条件を設定します。そして、Sort オブジェクト の Apply メソッドで、並べ替えを実行します。
Sort オブジェクト
object.Sort
引数・戻り値
- object ・・・ 対象となる Worksheet オブジェクトを指定します。
Sort オブジェクトのメソッド
- Sort.Apply
 SortFields コレクション で設定した条件をもとに、並べ替えを実行します。
 
- Sort.SetRange ( rng )
 並べ替えが行われる範囲を設定します。
 rng:Sort オブジェクトで指定される並べ替えが行われる範囲を指定します(省略不可)。
Sort オブジェクトの主なプロパティ
- Sort.Header
 先頭行を見出しとして使用するかどうかを指定します。値の取得および設定が可能です。XlYesNoGuess クラス の定数を使用します。定数 値 内容 xlGuess 0 Excel が自動的に設定 xlYes 1 見出しとして使用 xlNo 2 見出しとして使用しない(範囲全体が並べ替えの対象)既定値 
- Sort.MatchCase
 大文字と小文字を区別する場合は、True、しない場合は False を指定します。値の取得および設定が可能です。
 
- Sort.Orientation
 並べ替えの方向を XlSortOrientation 列挙型 で指定します。値の取得および設定が可能です。定数 値 内容 xlSortColumns 
 または、xlTopToBottom1 行単位で並べ替え(上から下)既定値 xlSortRows 
 または、xlLeftToRight2 列単位で並べ替え(左から右) 
- Sort.Rng
 並べ替えが行われる値の範囲を返します。値の取得のみ可能です。
 
- Sort.SortFields
 Sort オブジェクトに関連付けられている並べ替えフィールドのコレクションを表す SortFields オブジェクトを返します。詳細は、SortFields コレクション を参照。
 
- Sort.SortMethod
 並べ替えの方法を XlSortMethod 列挙型 で指定します。定数 値 内容 xlPinYin 1 ふりがなを使って並べ替え(既定値) xlStroke 2 ふりがなを使わずに並べ替え 
SortFields コレクション
SortFields コレクションは、SortField オブジェクト のコレクションです。
object.SortFields
引数・戻り値
- object ・・・ 対象となる Sort オブジェクトを指定します。
SortFields コレクションのメソッド
- SortFields.Add ( key [, sorton, order, customorder, dataoption ] )
 
 key:並べ替えのキー値をセル範囲(Range 型)で、 指定します。
 
 sorton:並べ替えの対象を指定します。xlSortOn 列挙型定数 値 内容 xlSortOnCellColor 1 セルの色 xlSortOnFontColor 2 フォントの色 xlSortOnIcon 3 アイコン xlSortOnValues 0 値 
 order:並び替え順序を XlSortOrder 列挙型 で指定します。定数 値 内容 xlAscending 1 昇順で並べ替え(既定値) xlDescending 2 降順で並べ替え 
 customorder:ユーザー設定の並べ替え順序の使用設定。カンマ区切りの文字列(Variant)で指定します。
 
 dataoption:テキストを並べ替える方法を指定します。XlSortDataOption 列挙型定数 値 内容 xlSortNormal 0 数値とテキストを別々に並べ替え(既定値) xlSortTextAsNumbers 1 テキストを数値データとして並べ替え 
- SortFields.Clear
 並べ替えのキー設定を全てクリアします。
 
SortFields コレクションの主なプロパティ
- SortFields.Count
 コレクションに含まれるオブジェクトの数を返します。値の取得のみ可能です。
 
- SortFields.Item ( index )
 各キーに関する設定(SortField オブジェクト)を取得します。
 
Sort オブジェクトを使った VBA ソースの書き方
    Dim myRng As Worksheet
    Set myRng = ActiveWorkbook.Worksheets(“Sheet1“)
With myRng.Sort ―――→ 並べ替えを行うワークシートの Sort オブジェクト
With .SortFields ―――→ SortFields コレクション
.Clear ―――→ Sortfields コレクション(全ての並べ替えのキー設定)をクリア
ここに、優先度の高い順に、並べ替えキー設定を追加していく
( キー設定1 ~ 4 を参照)
 
    End With
 
 
    .SetRange Range(“B3“).CurrentRegion ―――→ 並べ替えの対象範囲を設定
    .Header = xlYes ―――→ 先頭行を見出しとして使用
    .MatchCase = False ―――→ 大文字小文字の区別をするかを設定
    .Orientation = xlTopToBottom ―――→ 行単位で並べ替えるか列単位で並べ替えるかを設定
    .SortMethod = xlStroke ―――→ ふりがなを使って並べ替えるかどうかを設定
    .Apply
End With
<値で並べ替え>
<セルの背景色で並べ替え>
<セルのフォント色で並べ替え>
<セルのアイコンで並べ替え>
Sort オブジェクト(値の並べ替え)使用例
サンプルVBAソース
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | Sub Sample01_Sort_object()     Dim myRng As Worksheet     Set myRng = ActiveWorkbook.ActiveSheet     With myRng.Sort         With .SortFields             .Clear             '「I3」(合計)を降順で並べ替え             .Add Key:=Range("I3"), _                  SortOn:=xlSortOnValues, _                  Order:=xlDescending, _                  DataOption:=xlSortNormal             '「K3」(前合計)を降順で並べ替え             .Add Key:=Range("K3"), _                  SortOn:=xlSortOnValues, _                  Order:=xlDescending, _                  DataOption:=xlSortNormal             '「B3」(登録番号)を昇順で並べ替え             .Add Key:=Range("B3"), _                  SortOn:=xlSortOnValues, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal         End With         .SetRange Range("B3").CurrentRegion     '並べ替え範囲を設定         .Header = xlYes                         '先頭行を見出しとして使用         .MatchCase = False                      '大文字小文字を区別しない         .Orientation = xlTopToBottom            '行単位で並べ替え         .SortMethod = xlStroke                  'ふりがなを使わない         .Apply                                  '並べ替えを実行     End With End Sub | 
Sort メソッド(値の並べ替え)使用例 実行結果
サンプルVBAソース実行前
実行後
Sort オブジェクト(背景色・アイコンの並べ替え)使用例
サンプルVBAソース
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | Sub Sample02_Sort_object()     Dim myRng As Worksheet     Set myRng = ActiveWorkbook.ActiveSheet     With myRng.Sort         With .SortFields             .Clear             '色の並べ替え(青→緑→赤→黄)             .Add(Key:=Range("B3"), _                  SortOn:=xlSortOnCellColor, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal) _                  .SortOnValue.Color = vbBlue             .Add Key:=Range("B3"), _                  SortOn:=xlSortOnCellColor, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal             .Item(.Count).SortOnValue.Color = vbGreen             .Add(Key:=Range("B3"), _                  SortOn:=xlSortOnCellColor, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal) _                  .SortOnValue.Color = vbRed             .Add Key:=Range("B3"), _                  SortOn:=xlSortOnCellColor, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal             .Item(.Count).SortOnValue.Color = vbYellow             'アイコンの並べ替え(↑→↓の順番)             .Add Key:=Range("N3"), _                  SortOn:=xlSortOnIcon, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal             .Item(.Count).SetIcon Icon:=ActiveWorkbook.IconSets(1).Item(3)             .Add Key:=Range("N3"), _                  SortOn:=xlSortOnIcon, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal             .Item(.Count).SetIcon Icon:=ActiveWorkbook.IconSets(1).Item(2)             .Add(Key:=Range("N3"), _                  SortOn:=xlSortOnIcon, _                  Order:=xlAscending, _                  DataOption:=xlSortNormal) _                  .SetIcon Icon:=ActiveWorkbook.IconSets(1).Item(1)         End With         .SetRange Range("B3").CurrentRegion         .Header = xlYes         .MatchCase = False         .Orientation = xlTopToBottom         .SortMethod = xlStroke         .Apply     End With End Sub | 
Sort オブジェクト(背景色・アイコンの並べ替え)使用例 実行結果
サンプルVBAソース実行前
実行後
Sort オブジェクト(列単位の並べ替え)使用例
サンプルVBAソース
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Sub Sample03_Sort_object()     Dim myRng As Worksheet     Set myRng = ActiveWorkbook.ActiveSheet     With myRng.Sort         With .SortFields             .Clear             .Add Key:=Range("B3"), _                  SortOn:=xlSortOnValues, _                  Order:=xlAscending, _                  CustomOrder:="登録番号,氏名,国語,数学,社会,理科,英語,合計,平均,前合計,偏差値,前偏差値,比較", _                  DataOption:=xlSortNormal         End With         .SetRange Range("B3").CurrentRegion         .Header = xlYes         .MatchCase = False         .Orientation = xlLeftToRight         .SortMethod = xlPinYin         .Apply     End With End Sub | 
Sort オブジェクト(列単位の並べ替え)使用例 実行結果
実行後
関連記事
-  
              
- 
      ハイパーリンク(Hyperlinks オブジェクト)Hyperlinks オブジェクト ワークシートまたはセル範囲のワークシートコレ … 
-  
              
- 
      対象のセルを直接参照しているセル全てを取得(DirectDependents プロパティ)DirectDependents プロパティ DirectDependents … 
-  
              
- 
      セル範囲を結合・結合を解除(Merge メソッド・UnMerge メソッド)Merge メソッド・UnMerge メソッド セルを結合するには、指定したセル … 
-  
              
- 
      フリガナ(Phonetic プロパティ)Phonetic プロパティ 文字列(漢字など)をキーボードから入力した時の「読 … 
-  
              
- 
      入力規則(Validation オブジェクト)Validation オブジェクト セル範囲に入力できる値を制限するには 入力規 … 
-  
              
- 
      セルの位置を取得(Left プロパティ、Top プロパティ)Left プロパティ・Top プロパティ Left プロパティは、「A列」の左端 … 
-  
              
- 
      重複するデータを削除(RemoveDuplicates メソッド)RemoveDuplicates メソッド 指定したセル範囲から重複データを含む … 
-  
              
- 
      セルの特定の要素のみをペーストする(PasteSpecial メソッド)PasteSpecial メソッド PasteSpecial メソッドは、Cop … 
-  
              
- 
      任意の行または列を参照(Rows プロパティ,Columns プロパティ)Rows プロパティ・Columns プロパティ Rows プロパティは、オブジ … 
-  
              
- 
      外枠罫線の設定(BorderAround メソッド)外枠罫線の設定 罫線の設定には、Borders プロパティを使用しますが、範囲内 … 
- PREV
- 並べ替え(Sort メソッド)
- NEXT
- セルの値を置換(Replace メソッド)
 
        






Comment
おはようございます。
困っているので教えて下さい。
3つの条件で、並べ替えをしたいです。
1つ目と2つ目は、決まった順番があるのでその順にしたいです。
3つ目は、一部降順なのですがややこしいので決まった順番で指定しようかと。
その場合、ユーザー設定リストに登録するのですがマクロでそれを表現するのかが分かりません。
ご教示願います。
コメントありがとうございます。
返事が遅くなり申し訳ありません。
ユーザー設定リストを使った並べ替えの使用例を以下ページに作成しましたので参考にしてください。
ユーザー設定リストを使って並べ替える(Sort)