ユーザー設定リストを使って並べ替える(Sort)
VBAでリスト、テーブルを並べ替える(Sort)
VBAで、ソートを行うには、Sort メソッド(Excel 2003 以降)や Sort オブジェクト(Excel 2007 以降)を使用します。
組み込みのユーザー設定リストや独自に作成したユーザー設定リストを使ってソートを実行するには、Sort メソッド の場合は、引数 ordercustom に「ユーザー設定リスト」のダイアログボックスの上からの順番を数値で指定します。Sort オブジェクト の場合は、SortFields.Add メソッド で、引数 customorder に、ユーザー定義の並べ替えの順番をカンマ区切りの文字列で指定するか、「ユーザー設定リスト」のダイアログボックスの上からの順番を数値で指定します。
Sort メソッド の引数 ordercustom には、直接文字列を指定して、並べ替えの基準を設定することはできません。まず、ユーザー設定リストに登録する必要があります。
Sort メソッド に関しての詳細は 並べ替え(Sort メソッド)、Sort オブジェクト に関しての詳細は 並べ替え(Sort オブジェクト, SortFields コレクション) を参照してください。
Sort メソッド(Excel 2003 以降)
<「ユーザー設定リスト」を使用して並べ替え>
object1.Sort ([ key1, order1, header, ordercustom, matchcase, orientation, sortmethod, dataoption1 ] )
<「ユーザー設定リスト」に登録>
object2.AddCustomList( listarray )
引数・戻り値
- object1 ・・・ 対象となる Range オブジェクトを指定します。
- key1 ・・・ 並べ替えキーのフィールドを Range オブジェクト(セル)、または文字列で指定します。
- order1 ・・・ key1 で指定した値の並び替え順序を XlSortOrder 列挙型 で指定します。
xlAscending … 昇順で並べ替え(既定値)
xlDescending … 降順で並べ替え - header ・・・ 先頭行を見出しとして使用するかどうかを指定します。
xlGuess … Excel が自動的に設定
xlYes … 見出しとして使用
xlNo … 見出しとして使用しない(既定値) - ordercustom ・・・ ユーザー設定の並べ替え順のリスト内の番号を示す、1 から始まる整数を指定します。
- orientation ・・・ 並べ替えの方向を XlSortOrientation 列挙型 で指定。
xlSortColumns … 行単位で並べ替え(上から下)既定値
xlSortRows … 列単位で並べ替え(左から右) - sortmethod ・・・ 並べ替えの方法を XlSortMethod 列挙型 で指定します。
xlPinYin … ふりがなを使って並べ替え(既定値)
xlStroke … ふりがなを使わずに並べ替え - DataOption1 ・・・ Key1 で指定した範囲でテキストを並べ替える方法を指定します。
xlSortNormal … 数値とテキストを別々に並べ替え(既定値)
xlSortTextAsNumbers … テキストを数値データとして並べ替え - object2 ・・・ 対象となる Application オブジェクトを指定します。
- listarray ・・・ ユーザー設定リストに登録する文字列の配列を指定します。
(例)
Application.AddCustomList ListArray:= Array(“日”,”月”,”火”,”水”,”木”,”金”,”土”)
ユーザー設定リストを使って並べ替え(Sort メソッド)使用例
サンプルVBAソース1
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 |
Sub Sample_SortMethod() Dim myRng As Worksheet Set myRng = ActiveWorkbook.Worksheets("売上") With myRng.Range("A1").CurrentRegion '「フリガナ」をイロハ順で並べ替え(ユーザー設定リスト使用) .Sort key1:=Range("H1"), _ order1:=xlAscending, _ Header:=xlYes, _ ordercustom:=13, _ MatchCase:=False, _ Orientation:=xlSortColumns, _ SortMethod:=xlStroke '「四半期」を並べ替え .Sort key1:=Range("E1"), _ order1:=xlAscending, _ Header:=xlYes, _ ordercustom:=9, _ MatchCase:=False, _ Orientation:=xlSortColumns, _ SortMethod:=xlStroke '「期」を昇順で並べ替え .Sort key1:=Range("B1"), _ order1:=xlAscending, _ Header:=xlYes, _ MatchCase:=False, _ Orientation:=xlSortColumns, _ SortMethod:=xlStroke End With End Sub |
実行結果
現在のユーザー設定リスト
サンプルVBAソース1 実行前
サンプルVBAソース1 実行後
Sort オブジェクト(Excel 2007 以降)
<SortFields.Add メソッド>
object.SortFields( key [, sorton, order, customorder, dataoption ] )
引数・戻り値
- object ・・・ 対象となる Sort オブジェクトを指定します。
- key ・・・ 並べ替えのキー値をセル範囲(Range 型)で、 指定します。
- sorton ・・・ 並べ替えの対象を指定します。
xlSortOnCellColor … セルの色
xlSortOnFontColor … フォントの色
xlSortOnIcon … アイコン
xlSortOnValues … 値 - order ・・・ 並び替え順序を XlSortOrder 列挙型 で指定します。
xlAscending … 昇順で並べ替え(既定値)
xlDescending … 降順で並べ替え - customorder ・・・
ユーザー定義の並べ替えの順番をカンマ区切りの文字列(Variant)で指定するか、「ユーザー設定リスト」のダイアログボックスの上からの順番を数値で指定します。 - dataoption ・・・ テキストを並べ替える方法を指定します。
xlSortNormal … 数値とテキストを別々に並べ替え(既定値)
xlSortTextAsNumbers … テキストを数値データとして並べ替え
ユーザー設定リストを使って並べ替え(Sort オブジェクト)使用例
サンプルVBAソース2
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 |
Sub Sample_SortObject() Dim myRng As Worksheet Set myRng = ActiveWorkbook.Worksheets("売上") With myRng.Sort With .SortFields .Clear '「期」を昇順で並べ替え .Add Key:=Range("B1"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal '「四半期」を並べ替え(文字列を指定) .Add Key:=Range("E1"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:="第1四半期,第2四半期,第3四半期,第4四半期", _ DataOption:=xlSortNormal '「フリガナ」をイロハ順で並べ替え(ユーザー設定リスト使用) .Add Key:=Range("H1"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:=12, _ DataOption:=xlSortNormal End With .SetRange Range("A1").CurrentRegion '並べ替え範囲を設定 .Header = xlYes '先頭行を見出しとして使用 .MatchCase = False '大文字小文字を区別しない .Orientation = xlTopToBottom '行単位で並べ替え .SortMethod = xlStroke 'ふりがなを使わない .Apply '並べ替えを実行 End With End Sub |
実行結果
サンプルVBAソース2 実行前
サンプルVBAソース2 実行後
関連記事
-
Join 関数(配列の要素を結合)
Join 関数 1次元配列の各要素を指定した区切り文字で連結します。 【書式】 …
-
XlThemeColor 列挙型
XlThemeColor 列挙 定数 値 内容 xlThemeColorDark …
-
変数が配列かどうかをチェックする( IsArray 関数 )
IsArray 関数の使い方 【書式】 result = IsArray( va …
-
変数がEmpty 値かどうかをチェックする( IsEmpty 関数 )
IsEmpty 関数の使い方 【書式】 result = IsEmpty ( e …
-
日付時刻:数値から日付・時刻データを取得( DateSerial 関数、TimeSerial 関数 )
DateSerial 関数(数値を使って日付データを取得) 【書式】 date …
-
データ型変換関数
データ型変換関数の使い方 【書式】 function ( expression …
-
RGB 値一覧表(XlRgbColor 列挙型)
RGB 値(XlRgbColor 列挙型)一覧表 RGB 関数を使用して、出力さ …
-
配列の添字の最小値を「1」に設定する
Option Base ステートメントを使用する 【書式】 Option Bas …
-
文字列:文字列変数の値を右詰めまたは左詰めにする(RSet ステートメント・LSet ステートメント)
RSet ステートメント・LSet ステートメント 【書式】 < RSet ステ …
-
対象のオブジェクトをクリアする(Clear メソッド)
Clear メソッド 対象となるオブジェクト全体をクリアします。Range オブ …