サイトについて      連絡先   検索

VBA セルをソートする

はじめに

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」省略できます。キーの列を昇順か降順で並び替えるか指定します。
  • xlAscending (既定):昇順
  • xlDescending:降順
引数「Type」省略できます。ピボットテーブルを並び替えるときに指定します。
引数「Header」省略できます。先頭行をタイトル行とするかを指定します。
  • xlGuess:タイトル行か自動設定
  • xlNo (既定):タイトル行ではない
  • xlYes:タイトル行
引数「OrderCustom」省略できます。並び替えの順序を指定します。
引数「MatchCase」省略できます。大文字と小文字を区別するか指定します。
  • True:区別する
  • False (既定):区別しない
引数「Orientation」省略できます。並び替えの方向を指定します。
  • xlSortColumns (既定):上から下へ
  • xlSortRows:左から右へ
引数「SortMethod」省略できます。ふりがなを使うか指定します。
  • xlPinYin (既定):ふりがなを使う
  • xlStroke:ふりがなを使わない
引数「DataOption1 ~ 3」省略できます。数値と文字列を別にして並び替えるかを指定します。
  • xlSortNormal:数値と文字列を別に並び替える
  • xlSortTextAsNumbers:数値と文字列を同様に並び替える
戻り値なし

引数を省略すると前回の値が引き継がれます。予期せぬ動作にならないように、全ての引数を指定するのをオススメします。

セルをソートする

Range の引数にセル名を指定すると、そのセルの範囲をソートできます。

セル「A1」~「B2」で A 列をキーにしてソートするには Range("A1:B2").Sort(Range("A1")) のように指定します。

Call Range("A1:B2").Sort(Range("A1"))

ソートの例

' A 列をキーに降順
Call Range("A1:C5").Sort( _
  Key1:=Range("A1"), _
  Order1:=xlDescending)
1
' A 列を第 1 キー、B 列を第 2 キーに昇順
Call Range("A1:C5").Sort( _
  Key1:=Range("A1"), _
  Order1:=xlAscending, _
  Key2:=Range("B1"), _
  Order2:=xlAscending)
2
' A 行をキーに左から右へ並び替え
Call Range("A1:D3").Sort( _
  Key1:=Range("A1"), _
  Order1:=xlAscending, _
  Orientation:=xlSortRows)
3

指定したシートのセルをソートする

Range.Sort とコードに書くと、アクティブなシートのセルをソートします。これは ActiveSheet.Range.Sort の ActiveSheet が省略されています。

' どちらも同じコード
Range("A1:B2").Sort
ActiveSheet.Range("A1:B2").Sort

シートを指定するには Sheets の引数にシート名またはインデックスを指定します。

1

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。

' Sheet1 のセル「A1」~「B2」をソート
Call Sheets("Sheet1").Range("A1:B2").Sort(Range("A1"))
Call Sheets(1).Range("A1:B2").Sort(Range("A1"))

' Sheet2 のセル「A1」~「B2」をソート
Call Sheets("Sheet2").Range("A1:B2").Sort(Range("A1"))
Call Sheets(2).Range("A1:B2").Sort(Range("A1"))

関連ページ