3行マクロSortメソッドで範囲を並び替える動画解説 Excel

Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード

Excelの3行マクロ

動画でExcelマクロ解説

Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード、Excelの3行マクロ

動画版「Sortメソッドで範囲を並び替える、Excelの3行マクロ」です。
Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード、Excelの3行マクロ~すぐに使えるミニマクロ44回
始めに、オートフィルタでデータをセルの背景色やフォントの色で絞り込む場合の色指定を直感的にする方法を紹介します。 次に、本日は 並べ替えのマクロ を作成します。
並べ替えをするには RANGE オブジェクトの sort メソッドを使います。 このメソッドは選択したセル範囲の値を並び替える メソッドです。
(サンプルファイルは、こちらです。 時短激うまExcelの3行マクロ~すぐに使えるミニマクロ44回サンプル

色で絞り込むVBAコードとSortメソッドで並び替え

43回からの続き、色で並び替える場合の色指定方法

Range.Sort メソッド の構文と解説
Range.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)

名前 データ型 説明
Key1 バリアント型 範囲名 (String) または Range オブジェクトとして、最初の並べ替えフィールド?を?指定します。は、並べ替える値を決定します。
Order1 XlSortOrder Key1?で指定した値の並び替え順序を指定します。
Key2 バリアント型 2 番目の並べ替えフィールド。ピボットテーブルを並べ替えるときは使用できません。
Type バリアント型 ピボットテーブル内で並べ替える要素の種類を指定します。?XLSortLabels?を指定して、ピボットテーブルの範囲の [行/列ラベル] 領域の?experession範囲の対象となるラベルで並べ替えます。また、Key1?が R1C1 表記を使用して Values または Sub/Grand Totals 領域のセルを追加的にターゲットとする場合は?xLSortValues?を指定します。
Order2 XlSortOrder Key2?で指定された値の並べ替え順序を決定します。
Key3 バリアント型 3 番目の並べ替えフィールド。ピボットテーブルを並べ替えるときは使用できません。
Order3 XlSortOrder Key3?で指定した値の並び替え順序を指定します。
Header XlYesNoGuess 最初の行にヘッダー情報が含まれるかどうかを指定します。?xlNo?は既定値です。Excel にヘッダーを決定させるには、xlGuess?を指定します。
OrderCustom バリアント型 ユーザー設定の並べ替え順のリスト内の番号を示す、1 から始まる整数を指定します。
MatchCase バリアント型 大文字と小文字を区別する並べ替えを実行するには?True?、大文字と小文字を区別しない並べ替えを実行するには?False?に設定します。ピボットテーブルでは使用できません。
Orientation XlSortOrientation 行で並べ替えるか (既定) または列で並べ替えるかを指定します。 列で並べ替えるには、?xlSortColumns?値を 1 に設定します。?xlSortRows?の値を 2 に設定して行で並べ替えます (これが既定値です)。
SortMethod XlSortMethod 並べ替えの方法を指定します。
DataOption1 XlSortDataOption Key1で指定した範囲内のテキストを並べ替える方法を指定します。ピボットテーブルの並べ替えに適用されません。
DataOption2 XlSortDataOption Key2で指定された範囲内のテキストを並べ替える方法を指定します。ピボットテーブルの並べ替えに適用されません。
DataOption3 XlSortDataOption Key3で指定した範囲内のテキストを並べ替える方法を指定します。ピボットテーブルの並べ替えに適用されません。

各引数とも省略可能。ただし赤字の引数は前の設定を引き継ぐ可能性があるので、必ず指定した方が良い。

  1. 前回は、RGB 関数で色指定する方法や、基本的な色であればカラー定数を使って色指定する方法を解説しました。

    オートフィルター色で絞り込む1
  2. たとえば黄色で絞り込みたい場合には、以下のようなコードで絞り込むことができます。

    Sub AutoFilterCellColor()
        ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=vbYellow, _
        Operator:=xlFilterCellColor
    End Sub

    オートフィルター色で絞り込む2
  3. しかしいつも色が一定ではありませんし、そもそもいちいちVBEを開いて色を訂正したり変更したりするのは面倒です。効率的ではありません。
    背景色であれば、色の取得というのができたはずです。Range
    オブジェクトの インテリアプロパティのカラーメソッドで背景色の色を取得することができます。
    フォントの色であれば、Rangeオブジェクトのフォントプロパティーのカラーメソッドで 取得することができます。
    その取得した色をそのまま変数に入れてやれば、 オートフィルターで抽出するコードの中で利用することができるわけです。
    そこで、色を取得するコードを組みこむことにしました。

    オートフィルター色で絞り込む3
  4. 以下のコードにおいて、色をセルの背景色で抽出するときは引数オペレーターに、xlfiltercellcolor
    フォントカラーで抽出するときは、引数オペレーターに xlfilterfontcolorを指定してやります。

    オートフィルター色で絞り込む4
  5. 前回のコードをリメイクしていきます。
    色はどこから取ってくるのかというと、H1セルに背景色の色を指定してあります。となりはフォントカラーを指定するための準備です。
    変数を追加しました。 Dim mycellColor As Long
    そして引数 criteria 1にはmycellColorを、そしてOperatorには xlfilterfontcolorを指定してやります

    オートフィルター色で絞り込む5

セルの背景色やフォントカラーでデータを絞り混む場合のVBAコード

  1. コードを実行すると、データを背景色で絞り混むことができました。

    オートフィルター色で絞り込む6
    Sub AutoFilterCellColor2()
        Dim mycellColor As Long
        mycellColor = ActiveSheet.Range("H1").Interior.Color
        ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=mycellColor, _
        Operator:=xlFilterCellColor
    End Sub
    
  2. 次は、フォントカラーでデータを絞り混む場合です。
    今度は変数に Dim myfontColor As Longで指定し、このmyfontColorActiveSheet.Range("I1").Font.Colorとします。

    オートフィルター色で絞り込む7
    Sub AutoFilterFontColor2()
        Dim myfontColor As Long
        myfontColor = ActiveSheet.Range("I1").Font.Color
        ActiveSheet.Range("B2").AutoFilter Field:=5, Criteria1:=myfontColor, _
        Operator:=xlFilterFontColor
    End Sub
  3. コードを実行すると データで使われていたフォントカラーで絞り込むことができました。
    H 1に設定していた色がデータで使われているフォントカラーなので、その色でデータを絞り込むことができるというわけです。

    オートフィルター色で絞り込む8

データを並べ変えるマクロを作成

  1. ここから本題のデータを並び替えるマクロの説明となります。
    データを並べ替える方法は、二つあって Excel 2007から追加されたSortオブジェクト、それから以前よりあったSortメソッドです。
    sort メソッドは、range オブジェクトの sort メソッドとになります。

     sort メソッド
  2. アクティブシートの .Range("B2")セルを選択しています。
    .CurrentRegion  でその範囲ですね、現在使っている範囲全体を取得できますので、その範囲に対して、Sort Key1:=Range("B2")をセルB2の列に指定します。
    並べ替えは Order1:=xlDescendingという大きい方から小さい方へという指定です。

    SORTメソッドで並べ替え10
    Sub 並べ替え()
        ActiveSheet.Range("B2").CurrentRegion.Sort Key1:=Range("B2"), _
        Order1:=xlDescending, Header:=xlGuess
    End Sub
  3. ヘッダーの指定ですが、ヘッダーがある場合は、 引数 Header:=xlYes、また Excel の方で判断して欲しい場合は、 Header:=xlGuess としてやります。

    SORTメソッドで並べ替え11
  4. コードを実行すると、B列を降順で並べ変えてくれました。

    SORTメソッドで並べ替え12
  5. 次は昇順の Order1:=xlAscendingで並べ替えてみましょう。

    SORTメソッドで並べ替え13
    Sub 並べ替え2()
        ActiveSheet.Range("A2").CurrentRegion.Sort Key1:=Range("A2"), _
        Order1:=xlAscending, Header:=xlYes
    End Sub
    
  6. こんどは、同じく昇順ですが、金額で並べ替えてみましょう。

    SORTメソッドで並べ替え14
    Sub 並べ替え3()
        With ActiveSheet
            .Range("B2").CurrentRegion.Sort Key1:=Range("F2"), _
            Order1:=xlAscending, Header:=xlYes
        End With
    End Sub
    
  7. まとめ: データ範囲を並べ替えるには、その対象となるRangeオブジェクトに対し、SORTメソッドを使用します。
    Sortメソッドの構文
     Sort (Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase , Orientation , SortMethod, DataOption1, DataOption2 , DataOption3)

  8. 引数名 データ型 説明
    Key1~3 Variant 並べ替えフィールドを範囲名 (文字列) またはRangeオブジェクトで指定
    Order1~3 XlSortOrder Key1~3で指定した値の並び替え順序を指定
    Header XlYesNoGuess 最初の行にヘッダー情報が含まれているかどうかを指定、xlNo は既定値