EXCEL VBA 並べ替え(SORT)。
EXCEL VBAでの並べ替え(SORT)の方法です。
一番簡単でかっこいい並べ替えは以下なのですが、弱点が3個までしか指示ができないので自分はあまり使いません。
4個以上に変更されたとき、後々面倒なので…。
といいつつも、やり方はあります。3個ずつ区切って逆から並べ替えればできます。ややこしいんで間違えそうですけどね。
例)並べ替えたい順番、A→B→C→D→E
D→Eやって
A→B→Cやる
で順番になります。
基本パターン
パラメーター
昇順 → order1:=xlAscending
降順 → order1:=xlDescending
ヘダーあり → Header:=xlYes
ヘダーなし → Header:=xlNo
ググって頂ければ詳細はたくさんあります。
sortを1行でくくるやり方
Sheets("DATA").Select Range("A1").Select With Range("A1").CurrentRegion .Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlYes, _ key2:=.Columns(2), order2:=xlAscending, Header:=xlYes, _ key3:=.Columns(3), order3:=xlAscending, Header:=xlYes End With
か、sortを1個づつ(反対から)のやり方。結果は一緒です。
Sheets("DATA").Select Range("A1").Select With Range("A1").CurrentRegion .Sort key1:=.Columns(3), order1:=xlAscending, Header:=xlYes .Sort key1:=.Columns(2), order2:=xlAscending, Header:=xlYes .Sort key1:=.Columns(1), order3:=xlAscending, Header:=xlYes End With
その他パターン
マクロを記録してSORTすると以下と同じようなものが、作成されます。
AパターンとBパターンは同じ動作をします。
EXCELの頭からデータがあればA、Bで良いのですが、途中から始まっている場合はBパターンをCパターンの形に変更させます。
【注意】最大数を指定しています。最近のパソコンはスペックが良いのでマックス行でよいと思いますが、事前に最大行数が判明していれば、その数で指定したほうが良いかと思います。
わかりづらいかな?えーと…
並べ替えをマクロで記録して、それを生成すると分かりやすいですね。
Aパターン
Columns("A:W").Select ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Clear ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "P:P"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "F:F"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "G:G"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "H:H"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets(mySheetName001).Sort .SetRange Range("A:W") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Bパターン
Columns("A:W").Select ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Clear ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "P1:P500000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "F1:F500000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "G1:G500000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets(mySheetName001).Sort.SortFields.Add Key:=Range( _ "H1:H500000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets(mySheetName001).Sort .SetRange Range("A1:W500000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select
Cパターン
Sheets("NEW_PICUP").Select Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort.SortFields.Add Key:= _ Range("G3:G1000000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort.SortFields.Add Key:= _ Range("E3:E1000000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort.SortFields.Add Key:= _ Range("B3:B1000000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort.SortFields.Add Key:= _ Range("C3:C1000000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("NEW_PICUP").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select
Discussion
New Comments
No comments yet. Be the first one!