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

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

引数「Key」には検索範囲のセルを指定する必要はありません。その列や行のセルであればどこでもキーにできます。

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

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

Sheet1 を指定するにはWorksheets("Sheet1")またはWorksheets(1)を入力します。

sheet1

' 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 = "アクティブ"
  • 目次
    • Sort メソッド
    • セルをソートする
    • 指定したシートのセルをソートする