【ExcelVBA】ソート(並び替え)する
Range.Sortメソッド または Sortオブジェクト を使います。
個人的には「値」のソートだけであれば、Range.Sortメソッドだけで事足りると思っています。
「値」「セルの色」「フォントの色」など多様にソートしたい場合は、Sortオブジェクトを使います。
★ソート可能な種類★
Range.Sortメソッド:値
Sortオブジェクト:値、セルの色、フォントの色、セルのアイコン
式.Range.Sort(Key1, Order1, Key2, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
※ソートする範囲を限定させたいのであれば、.Range("A1:C1").Sort の様に指定します。
結果
※第1キーのA列は昇順
※第2キーのB列は降順
実行前のテーブル
式.Sheet.Sort.SortFields.Add (Key, SortOn, Order, CustomOrder, DataOption)
※この Sample2 は、Sample1 と同じ結果になります。
結果
※第1キーのA列は昇順
※第2キーのB列は降順
実行前のテーブル
Sortオブジェクトは、ソート設定をクリアしない限り、並び替えのダイアログボックスに残ります。
以下は実行後の並び替えダイアログボックスの状態です。
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
なので、Sortオブジェクトを使い回す時は、.SortFields.Clear を最初にしておくといいでしょう。
※xlSortOnCellColor(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
※存在しないセルの色を指定した場合、ダイアログボックス内の順序は黒色で表示されます。
※xlSortOnFontColor(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
※存在しないフォントの色を指定した場合、ダイアログボックス内の順序は黒色で表示されます。
※xlSortOnIcon(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
記述例2(色ソート)
記述例3(アイコンソート)
SortOn:= データを並べ替える基準となるパラメーターを指定します。
Order:= 指定したフィールドまたは範囲の並べ替え順序を指定します。
DataOption:= テキストを並べ替える方法を指定します。
ソート(並び替え)は、
個人的には「値」のソートだけであれば、Range.Sortメソッドだけで事足りると思っています。
「値」「セルの色」「フォントの色」など多様にソートしたい場合は、Sortオブジェクトを使います。
★ソート可能な種類★
Range.Sortメソッド:値
Sortオブジェクト:値、セルの色、フォントの色、セルのアイコン
目次
Range.Sortメソッド
構文式.Range.Sort(Key1, Order1, Key2, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
値でソート
A列を昇順に、B列を降順に並べる例Sub Sample1() ThisWorkbook.ActiveSheet.Range("A1").Sort _ Header:=xlYes, _ Key1:=Range("A1"), Order1:=xlAscending, _ Key2:=Range("B1"), Order2:=xlDescending End Sub※3行目:範囲の左上を指定することで、テーブルの範囲を自動判別します。
※ソートする範囲を限定させたいのであれば、.Range("A1:C1").Sort の様に指定します。
結果
※第1キーのA列は昇順
※第2キーのB列は降順
実行前のテーブル
オプション一覧
引数 | 定数 | 説明 |
---|---|---|
Key1 | - | 最初の並べ替えフィールドを範囲名 (文字列) または Range オブジェクトで指定し、並べ替える値を特定します。 |
Order1 | xlAscending | 昇順に並べ替えます。既定値。 |
xlDescending | 降順で並び替えます。 | |
Key2 | 2 番目の並べ替えフィールド。 | |
Order2 | xlAscending | 昇順に並べ替えます。既定値。 |
xlDescending | 降順で並び替えます。 | |
Key3 | - | 3 番目の並べ替えフィールド。 |
Order3 | xlAscending | 昇順に並べ替えます。既定値。 |
xlDescending | 降順で並び替えます。 | |
Header | xlGuess | 先頭がヘッダーかどうかを自動判断させる。 |
xlYes | 先頭をヘッダーとみなす。 | |
xlNo | 先頭をヘッダーとみなさない。既定値。 | |
MatchCase | TRUE | True の場合、大文字と小文字を区別して並べ替えを行います。 |
FALSE | False の場合、大文字と小文字を区別しないで並べ替えを行います。 | |
Orientation | xlTopToBottom | 行方向(上から下へ向かって)並べ替えます。 これは既定値です。 |
xlLeftToRight | 列方向(左から右へ向かって)で並べ替えます。 | |
SortMethod | xlPinYin | 日本語をふりがなで並べ替えます。 |
xlStroke | 日本語を文字コードで並べ替えます 。 | |
DataOption1 | xlSortNormal | Key1 で指定した範囲で数値データとテキスト データを別々に並べ替えます。既定値。 |
xlSortTextAsNumbers | Key1 で指定した範囲でテキストを数値データとして並べ替えます。 | |
DataOption2 | xlSortNormal | Key2で指定した範囲で数値データとテキスト データを別々に並べ替えます。既定値。 |
xlSortTextAsNumbers | Key2で指定した範囲でテキストを数値データとして並べ替えます。 | |
DataOption3 | xlSortNormal | Key3で指定した範囲で数値データとテキスト データを別々に並べ替えます。既定値。 |
OrderCustom | - | ユーザー設定の並べ替え順のリスト内の番号を示す、1 から始まる整数を指定します。 |
Sortオブジェクト
構文式.Sheet.Sort.SortFields.Add (Key, SortOn, Order, CustomOrder, DataOption)
値でソート
A列を昇順に、B列を降順に並べる例Sub Sample2() With ThisWorkbook.ActiveSheet.Sort .SortFields.Clear End With With ThisWorkbook.ActiveSheet.Sort .SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending .SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlDescending End With With ThisWorkbook.ActiveSheet.Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .Apply 'ソート実行。必須。 End With End Sub※13行目:表(テーブル)の左上を指定することで、表(テーブル)の範囲を自動判別します。
※この Sample2 は、Sample1 と同じ結果になります。
結果
※第1キーのA列は昇順
※第2キーのB列は降順
実行前のテーブル
Sortオブジェクトは、ソート設定をクリアしない限り、並び替えのダイアログボックスに残ります。
以下は実行後の並び替えダイアログボックスの状態です。
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
なので、Sortオブジェクトを使い回す時は、.SortFields.Clear を最初にしておくといいでしょう。
With ThisWorkbook.ActiveSheet.Sort .SortFields.Clear End With
セルの色でソート
A列を昇順に、B列を降順に並べる例Sub Sample3() With ThisWorkbook.ActiveSheet.Sort .SortFields.Clear End With With ThisWorkbook.ActiveSheet.Sort '並び替え:黄色 .SortFields.Add(Key:=Range("A1"), SortOn:=xlSortOnCellColor, Order:=xlAscending) _ .SortOnValue.Color = RGB(255, 255, 0) '並び替え:水色 .SortFields.Add(Key:=Range("B1"), SortOn:=xlSortOnCellColor, Order:=xlDescending) _ .SortOnValue.Color = RGB(0, 255, 255) End With With ThisWorkbook.ActiveSheet.Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .Apply End With End Sub※xlSortOnCellColor(定数)を指定することで、セルの色での並び替えになります。
※xlSortOnCellColor(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
※存在しないセルの色を指定した場合、ダイアログボックス内の順序は黒色で表示されます。
フォントの色でソート
A列を昇順に、B列を降順に並べる例Sub Sample4() With ThisWorkbook.ActiveSheet.Sort .SortFields.Clear End With With ThisWorkbook.ActiveSheet.Sort '並び替え:赤色 .SortFields.Add(Key:=Range("A1"), SortOn:=xlSortOnFontColor, Order:=xlAscending) _ .SortOnValue.Color = RGB(255, 0, 0) '並び替え:青色 .SortFields.Add(Key:=Range("B1"), SortOn:=xlSortOnFontColor, Order:=xlDescending) _ .SortOnValue.Color = RGB(0, 0, 255) End With With ThisWorkbook.ActiveSheet.Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .Apply End With End Sub※xlSortOnFontColor(定数)を指定することで、フォントの色での並び替えになります。
※xlSortOnFontColor(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
※オートフィルタが設定されていると、ダイアログボックスの内容は正しく表示されません。並び替えは正しく行われます。
※存在しないフォントの色を指定した場合、ダイアログボックス内の順序は黒色で表示されます。
セルのアイコンでソート
A列を昇順に、B列を降順に並べる例Sub Sample5() With ThisWorkbook.ActiveSheet.Sort .SortFields.Clear End With With ThisWorkbook.ActiveSheet.Sort '並び替え:携帯の電波アイコン .SortFields.Add(Key:=Range("A1"), SortOn:=xlSortOnIcon, Order:=xlAscending) _ .SetIcon Icon:=ThisWorkbook.IconSets(12).Item(4) '並び替え:レ点 .SortFields.Add(Key:=Range("B1"), SortOn:=xlSortOnIcon, Order:=xlDescending) _ .SetIcon Icon:=ThisWorkbook.IconSets(8).Item(3) End With With ThisWorkbook.ActiveSheet.Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .Apply End With End Sub※xlSortOnIcon(定数)を指定することで、セルのアイコンでの並び替えになります。
※xlSortOnIcon(定数)は、.SortFields.Add(...) カッコが必要になります。
結果
※最優先のA列は昇順
※次優先のB列は降順
実行前のテーブル
実行後の並び替えダイアログボックスの状態
オプション一覧
記述例1(値ソート).Sort.SortFields.Add Key:=Range("●"), SortOn:=●, Order:=●, DataOption:=●
※.Add()のカッコはありません。記述例2(色ソート)
.Sort.SortFields.Add(Key:=Range("●"), SortOn:=●, Order:=●).SortOnValue.Color = RGB(255, 255, 255)
※RGBに指定する数値は 0~255 までです。記述例3(アイコンソート)
.Sort.SortFields.Add(Key:=Range("●"), SortOn:=●, Order:=●).SetIcon Icon:=ThisWorkbook.IconSets(●).Item(●)
SortOn:= データを並べ替える基準となるパラメーターを指定します。
定数 | 説明 |
---|---|
xlSortOnValues | 値(既定値) |
xlSortOnCellColor | セルの色 |
xlSortOnFontColor | フォントの色 |
xlSortOnIcon | アイコン |
Order:= 指定したフィールドまたは範囲の並べ替え順序を指定します。
定数 | 説明 |
---|---|
xlAscending | 指定したフィールドを昇順で並べ替えます。 (既定値) |
xlDescending | 指定したフィールドを降順で並べ替えます。 |
DataOption:= テキストを並べ替える方法を指定します。
定数 | 説明 |
---|---|
xlSortNormal | 値データとテキスト データを別々に並べ替えます。(既定値) |
xlSortTextAsNumbers | テキストを数値データとして並べ替えます。 |
ディスカッション
コメント一覧
まだ、コメントがありません