Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード
動画でExcelマクロ解説
Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード、Excelの3行マクロ
動画版「Sortメソッドで範囲を並び替える、Excelの3行マクロ」です。
Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード、Excelの3行マクロ~すぐに使えるミニマクロ44回
始めに、オートフィルタでデータをセルの背景色やフォントの色で絞り込む場合の色指定を直感的にする方法を紹介します。
次に、本日は 並べ替えのマクロ を作成します。
並べ替えをするには RANGE オブジェクトの sort メソッドを使います。 このメソッドは選択したセル範囲の値を並び替える メソッドです。
(サンプルファイルは、こちらです。 時短激うまExcelの3行マクロ~すぐに使えるミニマクロ44回サンプル)
色で絞り込むVBAコードとSortメソッドで並び替え
43回からの続き、色で並び替える場合の色指定方法
-
前回は、RGB 関数で色指定する方法や、基本的な色であればカラー定数を使って色指定する方法を解説しました。
-
たとえば黄色で絞り込みたい場合には、以下のようなコードで絞り込むことができます。
Sub AutoFilterCellColor() ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=vbYellow, _ Operator:=xlFilterCellColor End Sub
-
しかしいつも色が一定ではありませんし、そもそもいちいちVBEを開いて色を訂正したり変更したりするのは面倒です。効率的ではありません。
背景色であれば、色の取得というのができたはずです。Range
オブジェクトの インテリアプロパティのカラーメソッドで背景色の色を取得することができます。
フォントの色であれば、Rangeオブジェクトのフォントプロパティーのカラーメソッドで 取得することができます。
その取得した色をそのまま変数に入れてやれば、 オートフィルターで抽出するコードの中で利用することができるわけです。
そこで、色を取得するコードを組みこむことにしました。 -
以下のコードにおいて、色をセルの背景色で抽出するときは引数オペレーターに、xlfiltercellcolor。
フォントカラーで抽出するときは、引数オペレーターに xlfilterfontcolorを指定してやります。 -
前回のコードをリメイクしていきます。
色はどこから取ってくるのかというと、H1セルに背景色の色を指定してあります。となりはフォントカラーを指定するための準備です。
変数を追加しました。 Dim mycellColor As Long
そして引数 criteria 1にはmycellColorを、そしてOperatorには xlfilterfontcolorを指定してやります
セルの背景色やフォントカラーでデータを絞り混む場合のVBAコード
-
コードを実行すると、データを背景色で絞り混むことができました。
Sub AutoFilterCellColor2() Dim mycellColor As Long mycellColor = ActiveSheet.Range("H1").Interior.Color ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=mycellColor, _ Operator:=xlFilterCellColor End Sub
-
次は、フォントカラーでデータを絞り混む場合です。
今度は変数に Dim myfontColor As Longで指定し、このmyfontColor はActiveSheet.Range("I1").Font.Colorとします。Sub AutoFilterFontColor2() Dim myfontColor As Long myfontColor = ActiveSheet.Range("I1").Font.Color ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=myfontColor, _ Operator:=xlFilterFontColor End Sub
-
コードを実行すると データで使われていたフォントカラーで絞り込むことができました。
H 1に設定していた色がデータで使われているフォントカラーなので、その色でデータを絞り込むことができるというわけです。
データを並べ変えるマクロを作成
-
ここから本題のデータを並び替えるマクロの説明となります。
データを並べ替える方法は、二つあって Excel 2007から追加されたSortオブジェクト、それから以前よりあったSortメソッドです。
sort メソッドは、range オブジェクトの sort メソッドとになります。 -
アクティブシートの .Range("B2")セルを選択しています。
.CurrentRegion でその範囲ですね、現在使っている範囲全体を取得できますので、その範囲に対して、Sort Key1:=Range("B2")をセルB2の列に指定します。
並べ替えは Order1:=xlDescendingという大きい方から小さい方へという指定です。Sub 並べ替え() ActiveSheet.Range("B2").CurrentRegion.Sort Key1:=Range("B2"), _ Order1:=xlDescending, Header:=xlGuess End Sub
-
ヘッダーの指定ですが、ヘッダーがある場合は、 引数 Header:=xlYes、また Excel の方で判断して欲しい場合は、 Header:=xlGuess としてやります。
-
コードを実行すると、B列を降順で並べ変えてくれました。
-
次は昇順の Order1:=xlAscendingで並べ替えてみましょう。
Sub 並べ替え2() ActiveSheet.Range("A2").CurrentRegion.Sort Key1:=Range("A2"), _ Order1:=xlAscending, Header:=xlYes End Sub
-
こんどは、同じく昇順ですが、金額で並べ替えてみましょう。
Sub 並べ替え3() With ActiveSheet .Range("B2").CurrentRegion.Sort Key1:=Range("F2"), _ Order1:=xlAscending, Header:=xlYes End With End Sub
-
まとめ: データ範囲を並べ替えるには、その対象となるRangeオブジェクトに対し、SORTメソッドを使用します。
Sortメソッドの構文
Sort (Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase , Orientation , SortMethod, DataOption1, DataOption2 , DataOption3)
引数名 | データ型 | 説明 |
---|---|---|
Key1~3 | Variant | 並べ替えフィールドを範囲名 (文字列) またはRangeオブジェクトで指定 | Order1~3 | XlSortOrder | Key1~3で指定した値の並び替え順序を指定 | Header | XlYesNoGuess | 最初の行にヘッダー情報が含まれているかどうかを指定、xlNo は既定値 |