さわやかに

Pythonのことだったり子供のことだったり

ExcelVBA データの並べ替え

f:id:kinakobanana:20211023235354j:plain

Sortオブジェクト

Excel2007以降の難しいSort
「並べ替え条件の指定」と「並べ替えの挙動」の2つに大きく分かれる

1. 並べ替え条件の指定

シート.Sort.SortFields.Add2 Key:=基準(Range型), _
         SortOn:=セルの値かセルの色か文字色か条件付き書式か, _
         Order:=昇順か降順か, _
         CustomOrder:=ユーザ設定の並べ替え順序しようするか, _
         DataOption:=数値と文字列を別々に並べ替えるか文字列を数字とみなすか, _
         SubField:=データ型に対して並べ替えるフィールドを指定

【SortOn引数】

定数 意味 既定値
xlSortOnValues セルの値
xlSortOnCellColor セルの背景色  
xlSortOnFontColor 文字色  
xlSortOnIcon 条件付き書式のアイコン  

【Order引数】

定数 意味 既定値
xlAscending 昇順
xlDescending 降順  

【DataOption引数】

定数 意味 既定値
xlSortNormal 数値と文字列を別々に並べ替える
xlSortTextAsNumbers 文字列を数値として並べ替える  

必ず指定しなければならない引数はKeyのみ

2. 並べ替えの挙動

With シート.Sort
 .SetRange セル範囲(Range型)
 .Header = ヘッダーを含むか
 .MatchCase = 小文字大文字を区別するか
 .Orientation = 行方向か列方向か
 .SortMethod = ふりがなか文字コードか
 .Apply '並べ替え実行
End With

【Headerプロパティ】

定数 意味 既定値
xlGuess 自動判定
xlYes 1行目(1列目)はタイトル  
xlNo タイトルを含まない  

【MatchCaseプロパティ】
 大文字と小文字を区別する場合はTrue
 区別しない場合はFalse

【Orientationプロパティ】

定数 意味 既定値
xlTopToBottom 行方向に並べ替え
xlLeftToRight 列方向に並べ替え  

【SortMethodプロパティ】

定数 意味 既定値
xlPinYin ふりがなで並べ替え
xlStroke 文字コードで並べ替え  

Excel上の画面では次の通り
f:id:h_267_sunny:20200402003604j:plain
f:id:h_267_sunny:20200402012827j:plain
【例】

With Worksheets("Sheet1").Sort
 .SortFields.Clear
 .SortFields.Add2 Key:=Range("C1"), Order:=xlDescending
 .SetRange Range("A1:D10")
 .Header = xlYes
 .MatchCase = False
 .Orientation = xlTopToBottom
 .SortMethod = xlPinYin
 .Apply
End With

Sortメソッド

Excel2003以前の簡単なSort

セル範囲.Sort Key1:=基準(Range型), Order1:=昇順か降順か, Header:=ヘッダーを含むか

「Key」と「Order」は1~3まで指定できる
その他、「MatchCase」、「Orientation]、「SortMethod」などの引数がある

次のコードはA1セルを含む表全体を並べ替える

Range(”A1”).Sort Key1:=Range("D1"), Order1:=Ascending, Header:=xlYes