Excel。VBAでの並び替えは条件を設定してから実行させる2段階方式です。
<Excel VBA>
大量のデータから集計や抽出したあとに、例えば、売上高を降順で並び替えや、顧客名のフリガナを五十音順で並び替えを行いたいケースは結構あります。
Excel VBAで集計や抽出をしたら、ついでに並び替えも行いたいわけですね。
ところが、Excel VBAで並び替えを行う場合、ちょっとした特徴があります。
それが、並び替えの条件などを設定してから、並び替えを実行します。
つまり、「2段階方式」です。
次のデータを用意しました。
今回は、このデータのC列にある「売上高」を降順で並び替えるExcel VBAを作っていきます。
プログラム文はこのような感じです。
Sub 並び替え()
With ActiveSheet.Sort.SortFields
.Clear
.Add Key:=Range("c2"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
End With
With ActiveSheet.Sort
.SetRange Range("a1").CurrentRegion
.Header = xlYes
.Orientation = xlTopToBottom
.Apply
End With
End Sub
説明は後ほどとして、まずは実行して確認してみましょう。
ご覧のように、売上高を降順で並び替えすることができました。
では、プログラム文を確認していきましょう。
上部ブロックの「SortFieldsオブジェクト」が並び替えの条件などを設定するところです。
With ActiveSheet.Sort.SortFields
.Clear
.Add Key:=Range("c2"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
End With
「ActiveSheet.Sort.SortFields」を毎回入力するのは面倒なので、With ~ End With文を使用しています。
.Clearは、並び替えの条件が「SortFieldsオブジェクト」に残っているといけないので、並び替えの条件をクリアします。
.Add Key:=Range("c2")は、並び替えの基準となる列を指定します。
今回はC列の売上高が基準となります。
SortOn:=xlSortOnValuesの「SortOn」は並び替えの基準を指定します。
今回は、セルの値で並び替えるので、「xlSortOnValues」を設定します。
なお、SortOnですが、
xlSortOnCellColorがセルの背景色
xlSortOnFontColorがセルの文字の色
xlSortOnIconが条件付き書式のアイコン
というように、並び替えの条件を指定することもできます。
Order:=xlDescendingは、並び替えを昇順か降順か設定するところで、「xlDescending」なので降順という条件を設定しました。
DataOption:=xlSortNormalは、標準の並び替え基準という意味です。
要するに、「以前あった条件をクリアしてから、C列の値を基準に降順で並び替える」という条件を設定したわけです。
なので、まだ実行していません。
下部ブロックでは、上部ブロックで設定した条件に従い、並び替えを実行します。
With ActiveSheet.Sort
.SetRange Range("a1").CurrentRegion
.Header = xlYes
.Orientation = xlTopToBottom
.Apply
End With
.SetRange Range("a1").CurrentRegionは、並び替えの対象範囲を設定します。
今回は、A1から連続する範囲(CurrentRegion)としています。
.Header = xlYesは、先頭行がヘッダー。
つまり見出し行かどうかということを聞いています。
「xlYes」は、先頭行が見出し行なので、それ以降のデータが並び替えの対象ということです。
.Orientation = xlTopToBottomは、上から下に向かって並び替えを実行するという意味です。
.Applyは、「実行」という意味ですね。
このように、並び替えをExcel VBAで設定する場合は、2段階方式です。
このようなプログラム文を保存しておいて、コピペして使いまわすと、一から入力しない済むので楽かもしれませんね。