こんにちは、Ryoです。
2018年最初の投稿ですので、改めましてご挨拶を。
明けましておめでとうございます。本年も昨年同様、少しでもお役に立てるような内容を投稿していければと思っておりますので、今後ともよろしくお願い致します。
さて本題ですが、Excelでデータを扱う上で並べ替え(ソート)したい局面は多々あるかと思います。その並べ替えもデータであったり、セル背景色や場合によっては文字色など用途としては様々だと思いますので、今回はその内容について書いていきます。
1.データの並べ替え
おそらくこれが一番利用頻度が高いのではないかと思います。
サンプルとして以下Sheet1に画像のような表があるとして、この表内の「単価」を降順に並べ替えます。
≪実行前≫
≪実行後≫
このサンプルコードは以下の通りです。
Sub Sample1() With Worksheets("Sheet1").Sort '設定済み条件のクリア .SortFields.Clear 'ソートフィールドとしてセルD1降順設定 .SortFields.Add Key:=Cells(1, 4), _ SortOn:=xlSortOnValues, Order:=xlDescending 'ソート範囲に表全体を指定 .SetRange Range(Cells(1, 1), Cells(16, 4)) 'ヘッダー情報を含むよう指定 .Header = xlYes '並べ替え実行 .Apply End With End Sub
サンプルコードに記述している通り、並べ替えを行うにはSortオブジェクトとAddメソッドを使用します。
オブジェクト.Sort
このSortオブジェクトはセルや文字の色、アイコンなどで並べ替えを行うもので、これにAddメソッドを使ってSortオブジェクトのSortFieldsプロパティに並べ替えの設定を追加します。
オブジェクト.Add(Key,SortOn,Order,CustomOrder,DataOption)
Addメソッドの構文はこの通りですが、それぞれの引数については以下になります。
◆Addメソッドの引数
Key | 並べ替え基準セル |
SortOn | 並べ替えのタイプ |
Order | 並べ替え順序(昇順/降順) 降順⇒xlDescending 昇順⇒xlAscending |
CustomOrder | ユーザー設定の並べ替え基準 |
DataOption | 数値と文字列の並べ替え基準 |
◆引数SortOnに指定するxlSortOnクラスの定数
xlSortOnValues | セル内のデータで並べ替え |
xlSortOnCellColor | セル背景色で並べ替え |
xlSortOnFontColor | セル文字色で並べ替え |
xlSortOnIcon | 条件付き書式アイコンで並べ替え |
次にSortオブジェクト、プロパティについては以下の通りです。
◆Sortオブジェクトのメソッド
Apply | 並べ替えの実行 |
SetRange | 並べ替えるセル範囲を指定 |
◆Sortオブジェクトのプロパティ
Header | 最初の行にヘッダー情報が含まれるかを指定 |
MatchCase | True→大文字/小文字を区別 |
Orientation | 並べ替え方向の指定 xlSortRows→行単位 xlSortColumns→列単位 |
Parent | 指定されたオブジェクトの親を返す |
Rng | 並べ替え実施の値範囲を返す |
SortFields | 並べ替えフィールドの集合を表す |
SortMethod | 並べ替え方法にふりがなを使用する場合xlPinYin、 文字コードを使用する場合はxlStrole |
これらがAddメソッド、及びSortオブジェクトに指定する引数になります。
サンプルではデータを並べ替えているので、SortOn:=xlSortOnValues, Order:=xlDescendingの部分で「データ」「降順」を指定しています。
この部分の指定を変えることで、後述する「セル背景色」や「文字色」を対象にソートすることが可能になります。
因みに、並べ替えたデータを元に戻す場合ですが本サンプルでは「No.」欄を連番としているので、ここを昇順していすれば戻ります。
Sub Sample2() With Worksheets("Sheet1").Sort .SortFields.Clear '本サンプルの場合、No.欄を昇順指定することで元に戻す .SortFields.Add Key:=Cells(1, 1), _ SortOn:=xlSortOnValues, Order:=xlAscending .SetRange Range(Cells(1, 1), Cells(16, 4)) .Header = xlYes .Apply End With End Sub
VBAで処理した場合は実行後にアンドゥ出来ませんので、必要に応じてナンバリングしておくと良いかもしれませんね。
2.セルの色(背景色)で並べ替え
◆サンプル概要
Sheet1に以下画像があり、「単価」欄に「赤色」「水色」に塗りつぶされたセルを対象に並べ替えます。
≪実行前≫
≪実行後≫
◆サンプルコード
Sub Sample3() With Worksheets("Sheet1").Sort .SortFields.Clear '並べ替え条件1番目に「背景色:赤」を指定 .SortFields.Add(Key:=Cells(1, 4), SortOn:=xlSortOnCellColor) _ .SortOnValue.Color = RGB(255, 0, 0) '次の並べ替え条件に「背景色:水色」を指定 .SortFields.Add(Key:=Cells(1, 4), SortOn:=xlSortOnCellColor) _ .SortOnValue.Color = RGB(0, 204, 255) .SetRange Range(Cells(1, 1), Cells(16, 4)) .Header = xlYes .Apply End With End Sub
引数SortOnにxlSortOnCellColorを指定することで、セルの背景色で並べ替えることが出来ます。その際に並べ替える色の指定はSortOnValueオブジェクトのColorプロパティを使用すればOKです。
本サンプルでは、最初に「赤」、次に「水色」を指定していますので、その順に並べ替えを実行したことになります。
RGB関数で指定する際に数値がわからない場合は、Excelの「ホーム」タブにある塗りつぶしアイコンから「その他の色」で「ユーザー設定」を見るとわかりやすいです。
3.文字色で並べ替える
◆サンプル概要
ここはSample3コードとほぼ同様で引数SortOnの指定が変わるぐらいですね。
以下がサンプル画像です。
≪実行前≫
≪実行後≫
◆サンプルコード
Sub Sample4() With Worksheets("Sheet1").Sort .SortFields.Clear '並べ替え条件1番目に「フォント色:赤色」を指定 .SortFields.Add(Key:=Cells(1, 4), SortOn:=xlSortOnFontColor) _ .SortOnValue.Color = RGB(255, 0, 0) '次の並べ替え条件に「フォント色:水色」を指定 .SortFields.Add(Key:=Cells(1, 4), SortOn:=xlSortOnFontColor) _ .SortOnValue.Color = RGB(0, 204, 255) .SetRange Range(Cells(1, 1), Cells(16, 4)) .Header = xlYes .Apply End With End Sub
SortOn:=xlSortOnFontColorとすることで文字色で並べ替えを行うことができます。
4.まとめ
構文や引数だけを見るとわかりにくい感じがしますが、実際使ってみると基本的な記述の流れは同様なので、一例だけでも知っておくと用途に応じて幅広く対応できるのではないかと思います。
個人的にはセルの色分けをソートすることが多いのもあり、データでの並べ替え以外もサンプルとして書いてみましたので機会があればぜひご検討くださいませ!
以上、並べ替えを行う(データ/セル色/文字色)方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo