動画でExcelマクロ解説
動画版「Sortメソッドで範囲を並び替える、Excelの3行マクロ」です。
Sortメソッドで範囲並び替え、オートフィルターでを色で抽出する汎用コード、Excelの3行マクロ~すぐに使えるミニマクロ44回
始めに、オートフィルタでデータをセルの背景色やフォントの色で絞り込む場合の色指定を直感的にする方法を紹介します。
次に、本日は 並べ替えのマクロ を作成します。
並べ替えをするには RANGE オブジェクトの sort メソッドを使います。 このメソッドは選択したセル範囲の値を並び替える メソッドです。
(サンプルファイルは、こちらです。 時短激うまExcelの3行マクロ~すぐに使えるミニマクロ44回サンプル)
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で指定した範囲内のテキストを並べ替える方法を指定します。ピボットテーブルの並べ替えに適用されません。 |
各引数とも省略可能。ただし赤字の引数は前の設定を引き継ぐ可能性があるので、必ず指定した方が良い。
前回は、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を指定してやります

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

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