更新日:、 作成日:
VBA セルの並び替え、ソートする (Range.Sort)
はじめに
Excel VBA マクロでセルの並び替え、ソートする方法を紹介します。
Range.Sort メソッドから、セルを並び替えできます。
セルを昇順や降順に並び替えできます。行や列の方向に並び替えできます。
Sort メソッド
Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
引数「Key1 ~ 3」 | 省略できます。並び替えのキーになる列のセルを指定します。 |
引数「Order1 ~ 3」 |
省略できます。キーの列を昇順か降順で並び替えるか指定します。
|
引数「Type」 | 省略できます。ピボットテーブルを並び替えるときに指定します。 |
引数「Header」 |
省略できます。先頭行をタイトル行とするかを指定します。
|
引数「OrderCustom」 | 省略できます。並び替えの順序を指定します。 |
引数「MatchCase」 |
省略できます。大文字と小文字を区別するか指定します。
|
引数「Orientation」 |
省略できます。並び替えの方向を指定します。
|
引数「SortMethod」 |
省略できます。ふりがなを使うか指定します。
|
引数「DataOption1 ~ 3」 |
省略できます。数値と文字列を別にして並び替えるかを指定します。
|
戻り値の型 | なし |
このメソッドは Excel のユーザー設定の並べ替えダイアログと連動しています。引数を指定するとユーザー設定の並べ替えダイアログの設定が変更されます。逆にユーザー設定の並べ替えダイアログを実行すると、引数の既定値がその値になります。引数を省略すると前回の値が引き継がれるため、すべての引数を指定するのをオススメします。
スポンサーリンク
セルをソートする
Range の引数にセル名を指定すると、そのセルの範囲をソートできます。
セル「A1」~「B2」で A 列をキーにしてソートするには Range("A1:B2").Sort(Range("A1")) を入力します。
Call Range("A1:B2").Sort(Range("A1"))
Call Range("A1:B2").Sort(Range("A1"), xlAscending, Range("A1"), , xlAscending, Range("A1"), xlAscending, xlNo, , False, xlSortColumns, xlPinYin, xlSortNormal, xlSortNormal, xlSortNormal)
ソートの例
A 列をキーに降順
Call Range("A1:C5").Sort( _
Key1:=Range("A1"), Order1:=xlDescending)
A 列を第 1 キー、B 列を第 2 キーに昇順
Call Range("A1:C5").Sort( _
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlAscending)
A 行をキーに左から右へ並び替え
Call Range("A1:D3").Sort( _
Key1:=Range("A1"), Order1:=xlAscending, _
Orientation:=xlSortRows)
引数「Key」に検索範囲のセルを指定する必要はありません。その列や行のセルであればどこでもキーにできます。
別シートのセルをソートする
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
' Sheet1 のセル「A1」~「B2」をソート
Call Worksheets("Sheet1").Range("A1:B2").Sort(Range("A1"))
Call Worksheets(1).Range("A1:B2").Sort(Range("A1"))
' Sheet2 のセル「A1」~「B2」をソート
Call Worksheets("Sheet2").Range("A1:B2").Sort(Range("A1"))
Call Worksheets(2).Range("A1:B2").Sort(Range("A1"))
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
スポンサーリンク