データを任意の順番に並び替え【ExcelVBA】
最初にSortFields.Clearメソッドで並び替え設定情報を最初に全てクリアし、SortFields.Addメソッドで設定情報を追加していく
引数Keyにどこで並び替えるか、最優先されるキーを指定、引数SortOnに何で並び替えるかを指定
xlSortOnValuesで値、xlSortOncellColorでセルの色、xlSortOnFontColorでフォントの色、xlSortOnIconでアイコン
引数Orderで並び替え順序を指定 xlAscending(昇順)、xlDescending(降順)、xlManual(手動)
引数CustomOrderに何番目のユーザー設定リストで並び替えするかリスト番号を指定する
ユーザー設定リストはユーザーにより違う為、並び替えしたいリストを追加する
Application.AddCustomListメソッドで、ListArrayに追加したいセル範囲を指定し
各行をリストとして追加する場合引数ByRowにTrue、各列をリストとして追加する場合引数ByRowにFalseを指定
追加された最後のリストを指定する為に、Application.CustomListCountプロパティでカスタムリストの数を取得する
最後に追加したリストをApplication.DeleteCustomListメソッドで削除する
引数ListNumに削除したいカスタムリストの番号を指定する
並び替えの情報設定ができたらSortオブジェクトにSetRangeメソッドで並び替えが行われる範囲設定
Headerプロパティにヘッダー情報がある(xlYes)か、ないか(xlNo)を指定する
Orientationプロパティに並び替えの方向を指定、列はxlSortColumnsで行はxlSortRows(既定値)
最終的に設定が全て完了したらApplyメソッドで並べ替えを実行する
※注意 一番最後に保存する前に再度並び替え設定をクリアする必要があります →'このシートの並び替え情報を全てクリアSheet2.Sort.SortFields.Clear
deletecustomlistを使用すると並び替え情報が残ったまま、リストを削除するので
並び替え情報にはリストがあり、リストデータはなくなるのでエラーになり、保存する際にエラーが発生し保存できなくなります
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に使用したサンプルコード
Option Explicit
Public Sub sample()
'リストを追加する
Application.AddCustomList Sheet1.Range("B88", "B94"), False
'このシートの並び替え情報を全てクリア
Sheet2.Sort.SortFields.Clear
'並び替え情報を追加する
Sheet2.Sort.SortFields.Add Key:=Range("A1"), Order:=xlAscending, CustomOrder:=Application.CustomListCount
'データの並び替えをするSortオブジェクトの
With Sheet2.Sort
'SetRangeメソッドで範囲設定
.SetRange Sheet2.Range("A1").CurrentRegion
'見出しがあるかどうか
.Header = xlYes
'並び替えの方向
.Orientation = xlSortColumns
'現在の設定で並べ替え
.Apply
End With
'リストを削除する
Application.DeleteCustomList (Application.CustomListCount)
'このシートの並び替え情報を全てクリア
Sheet2.Sort.SortFields.Clear
End Sub