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 オブジェクト(列単位の並べ替え)使用例 実行結果
実行後