ユーザー設定リストを使って並べ替える(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 実行後
関連記事
-
連想配列(Dictionary オブジェクト)
連想配列 連想配列とは、添字(キー)に文字列を使用することができる配列です。 V …
-
Math 関数( Abs,Atn,Cos,Exp,Log,Rnd,Sgn,Sin,Sqr,Tan )
Abs 関数 【書式】 value = Abs ( number ) 【引数・戻 …
-
Erase ステートメント(配列の初期化・動的配列のメモリ解放)
Erase ステートメントの使い方 【書式】 Erase myArray [, …
-
日付時刻:日付・時刻の間隔を取得( DateDiff 関数 )
DateDiff 関数の使い方 【書式】 result = DateDiff ( …
-
変数がEmpty 値かどうかをチェックする( IsEmpty 関数 )
IsEmpty 関数の使い方 【書式】 result = IsEmpty ( e …
-
セルのデータを区切り文字で複数のセルに分割する(TextToColumns メソッド)
TextToColumns メソッド TextToColumns メソッドを使用 …
-
指定した値を16進数で表記した文字列に変換する(Hex 関数)
Hex 関数 の使い方 【書式】 result = Hex ( expressi …
-
IME の現在の状態を取得します(IMEStatus 関数)
IMEStatus 関数の使い方 【書式】 result = IMEStatus …
-
上付き文字・下付き文字(Superscript,Subscript)
上付き文字(Superscript プロパティ) Superscript プロパ …
-
日付時刻:日付から曜日を取得( Weekday 関数、WeekdayName 関数 )
Weekday 関数(日付から曜日を表す数値を返す)の使い方 【書式】 week …