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

VBA セルの並び替え、ソート

はじめに

Excel VBA マクロのセルの並び替え、ソートする方法を紹介します。

Range.Sort メソッドでセルを昇順や降順に並び替えできます。

  • 目次
    • 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 の引数にシート名またはインデックスを指定します。

sheet1

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"))
  • 目次
    • Sort メソッド
    • セルをソートする
    • 指定したシートのセルをソートする