Range.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
ExcelVBAでエクセル上のセルの並び替えをするRangeオブジェクトのメソッドです。
並び替えの対象ととする列(ソートキー)は引数で3つまで選択出来ます。
Rangeの部分に並び替えをする範囲を指定します。
○引数一覧
ExcelVBAでエクセル上のセルの並び替えをするRangeオブジェクトのメソッドです。
並び替えの対象ととする列(ソートキー)は引数で3つまで選択出来ます。
Rangeの部分に並び替えをする範囲を指定します。
○引数一覧
| 名前 | 説明 | 型 | 備考 |
|---|---|---|---|
| Key1 | ソートキー1 (Rangeか並び替え範囲 1行目のフィールド名) |
Variant | 必須 |
| Order1 | Key1の並び替え順 | XlSortOrder | xlAscending(昇順) xlDescending(降順) |
| key2 | ソートキー2 (Rangeか並び替え範囲 1行目のフィールド名) |
Variant | |
| Order2 | Key2の並び替え順 | XlSortOrder | xlAscending(昇順) xlDescending(降順) |
| Key3 | ソートキー3 (Rangeか並び替え範囲 1行目のフィールド名) |
Variant | |
| Order3 | Key3の並び替え順 | XlSortOrder | xlAscending(昇順) xlDescending(降順) |
| Header | 最初の行がヘッダーかどうか | XlYesNoGuess | xlGuess(エクセルに判断させる) XlYes(1行目ヘッダーとする) xlNo(既定値:一行目も並び替え対象) |
| OrderCustom | Key1並び順の昇順降順以外の設定 | Long | 1(既定値) 2以降はユーザー設定リストに対応 |
| MatchCase | 大文字・小文字の区別 | True or False |
する しない(既定値) |
| Orientation | 並び替えの方向 | XlSortOrientation列挙 | xlSortColumns(既定値:縦方向) =xlTopToBottom xlSortRows(横方向) =xlLeftToRight |
| SortMethod | 並べ替えの種類(言語による) | XlSortMethod 列挙 | xlStroke(総画数) xlPinYin(既定値:フリガナ(音読)) |
| DataOption1 | Key1の文字列並び替え方法 | XlSortDataOption 列挙 | xlSortTextAsNumbers (文字列を数値とみなす) xlSortNormal(既定値:文字列と数値は別として扱う) |
| DataOption2 | Key2の文字列並び替え方法 | XlSortDataOption 列挙 | xlSortTextAsNumbers (文字列を数値とみなす) xlSortNormal(既定値:文字列と数値は別として扱う) |
| DataOption3 | Key3の文字列並び替え方法 | XlSortDataOption 列挙 | xlSortTextAsNumbers (文字列を数値とみなす) xlSortNormal(既定値:文字列と数値は別として扱う) |
・引数はKey1以外は省略可能です。が、省略すると各引数は保存されている値で処理されるのである程度指示してあげるのが好ましいとおもいます。
・Key1~3の優先順位はKey1>Key2>Key3となります。
・OrderCustomを指定するには、ユーザー設定リストを作成しておくことが必要になります。
設定方法はエクセル上で並び替えの画面を表示し(データ→並び替え)、順序の項目欄でユーザー設定リストの「新しいリスト」というところで任意の文字列を記入します。
ピボットテーブルの並び替えは省略してます。
○サンプルコード
・Key1~3の優先順位はKey1>Key2>Key3となります。
・OrderCustomを指定するには、ユーザー設定リストを作成しておくことが必要になります。
設定方法はエクセル上で並び替えの画面を表示し(データ→並び替え)、順序の項目欄でユーザー設定リストの「新しいリスト」というところで任意の文字列を記入します。
ピボットテーブルの並び替えは省略してます。
○サンプルコード
Sub RStest()
'並び替え対象範囲(A1~H20)
Range("A1:H20").Sort _
key1:=Range("B1"), order1:=xlAscending, _
key2:="順位", order2:=xlDescending, _
key3:=Range("C1"), Order3:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=True, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
End Sub
↓はエクセル並び替え画面との対応画像です。
○エラー
複数シートをまとめてソートしていたらエラーが出ました。
ソートするシートはアクティブになっていないと、
並べ替えの参照が正しくありません。参照が並べ替えるデータ内にあることと「最優先されるキー」ボックスが空白でないことを確認してください。
とエラーメッセージが出ます。
ソートする前にシートをアクティブにすればエラー回避できるはずです。
