ExcelVBA データソート
今回、再びExcelによるシステム開発を担当しました。
特に新しい機能を使ったわけでもなく、これまでに何度も使った機能により開発したのですが、意外と使いこなせていないことに気づきました。
特にバージョンアップによる機能の使い方の違いです。
今回はデータの並び替えについて記述したいと思います。
Excel2003まではRangeオブジェクトのSortメソッドを使っていました。
基本的には次のような記述になります。
◆合計値の降順に並べ替え
Range("A1:R21").Sort Key1:=Range("Q2"), Order1:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
また、この機能はソートキーの設定が3項目までだったため、それ以上の項目のソートの場合はソートを複数回に分けて実行する必要がありました。
◆合計、5教科計、3教科計の降順、氏名(フリガナ)の昇順に並べ替え
Range("A1:R21").Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
Range("A1:R21").Sort Key1:=Range("Q2"), Order1:=xlDescending, _
Key2:=Range("K2"), Order2:=xlDescending, _
Key3:=Range("G2"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
それが、Excel2007以降はSortオブジェクトにより、次のような記述で
ソートキーが4項目以上でも一度に実行することができるようになりました。
◆合計値の降順に並べ替え
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("Q2:Q21"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.SetRange Range("A1:R21")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
◆合計、5教科計、3教科計の降順、氏名(フリガナ)の昇順に並べ替え
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("Q2:Q21"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("K2:K21"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("G2:G21"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("C2:C21"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:R21")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
簡単ですが、以上です。
【株式会社 エム・システム】 本 社 :〒124-0023 東京都葛飾区東新小岩8-5-5 5F TEL : 03-5671-2360 / FAX : 03-5671-2361 盛岡事業所 :〒020-0022 岩手県盛岡市大通3-2-8 3F TEL : 019-656-1530 / FAX : 019-656-1531 E-mail : info@msystm.co.jp URL : http://msystm.co.jp/ : http://msystm.co.jp/excel_top.html ブログ : http://d.hatena.ne.jp/msystem/ Facebook : http://www.facebook.com/msysteminc