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回からの続き、色で並び替える場合の色指定方法

  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 は既定値