【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 | テキストを数値データとして並べ替えます。 |




ディスカッション
コメント一覧
まだ、コメントがありません