ユーザー設定リストを使って並べ替える(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 実行後
関連記事
-
VBA で正規表現を使う(RegExp オブジェクトのプロパティ)
RegExp オブジェクトのプロパティ RegExp オブジェクトの詳細に関して …
-
Erase ステートメント(配列の初期化・動的配列のメモリ解放)
Erase ステートメントの使い方 【書式】 Erase myArray [, …
-
文字列:指定した文字の文字コードを取得する(Asc 関数)
Asc 関数 【書式】 result = Asc ( string ) 引数・戻 …
-
取り消し線を設定する(Strikethrough プロパティ)
取り消し線を設定する(Strikethrough プロパティ) Striketh …
-
VBA の演算子(論理演算子:And、Eqv、Imp、Not、Or、Xor)
論理演算子 論理演算を行うときに使用する演算子で、以下の 6 種類があります。 …
-
VBA で正規表現を使う(RegExp オブジェクト)
RegExp オブジェクト VBA で正規表現を使うには、VBScript のR …
-
フォント名(Name,ThemeFont,StandardFont)
フォント名を取得・設定する(Name プロパティ) Name プロパティは、オブ …
-
カレントフォルダの取得・設定(DefaultFilePath プロパティ)
DefaultFilePath プロパティ カレントフォルダとは、ブックを開いた …
-
セルのデータを区切り文字で複数のセルに分割する(TextToColumns メソッド)
TextToColumns メソッド TextToColumns メソッドを使用 …
-
日付時刻:経過時間を取得( Timer 関数 )
Timer 関数の使い方 【書式】 result = Timer () 【戻り値 …