はじめに
Excelで並べ替えを行うにはSortメソッドと、Excel2007以降で使用できるSortオブジェクトがあります。
ここではSortオブジェクトの使い方について解説します。
Sortオブジェクトでのセルデータの並べ替えは、いくつかの手順を踏んで設定していきます。少々複雑ですが、基本を押さえれば特に難しくはありません。
まずは基本の形を覚えて、必要に応じて応用していくと良いでしょう。
注意点としては、セル範囲を指定する際、セルデータのある位置を指定する際、シート指定を間違えないようにする事です。
関係ないシートがアクティブになっている場合、セル指定が関係ない場所になってエラーとなります。
以下のプログラムは、コピーして設定を変更すれば、簡単に使えますので活用してみてください。
基本形のプログラム
以下のようなセルデータの並べ替えを行います。

C列でソートを書ける場合は以下の様になります。
Sub SortSample1()
Dim sh As Worksheet
Set sh = Worksheets("売上")
With sh.Sort
With .SortFields
.Clear '全ての並べ替えのキー設定をクリア
'【ソート対象を追加】
.Add Key:=sh.Range("C1"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'Key;ソート対象列のセル指定
'SortOn;ソート対象[xlSortOnValues(値),xlSortOnCellColor(セル色).
' xlSortOnFontColor(フォント色),xlSortOnValues(アイコン)]
'Order;ソート順[xlAscending(昇順),xlDescending(降順)]
'DataOption;数値とテキスト[xlSortNormal(同じに扱う)
' ,xlSortTextAsNumbers(別で扱う)]
End With
.SetRange sh.Range("A1").CurrentRegion '並べ替えの対象範囲を設定
.Header = xlYes '先頭行を見出しとして使用するか
.MatchCase = False '大文字小文字の区別をするか
.Orientation = xlTopToBottom '行単位で並べ替え(既定値)
.SortMethod = xlPinYin 'ふりがなを使って並べ替える(既定値)
.Apply '実行
End With
End Sub
結果は以下の通りです。C列がソートされました。

プログラム解説
上記のサンプルでは、コメントアウトを参考にして書き換えられるようになっていますので、そのままコピーして利用できます。
利用する際は、下線部分を適宜、ご自身の環境に合わせて変更してください。
まず、最初に下線部分に注目してください。
冒頭で、ワークシート変数(sh)を定義しているのは、その後のRange指定で違うシートを指定しないための伏線となります。
このようにワークシート変数を定義しておけば、エラーを防ぐ事ができます。
全体を見ますと、以下のような手順でプロパティ値の設定とメソッドを使っています。
With sh.Sort
with .SortFields
.Clear
.Add
End With
.SetRange
.Header
.MatchCase
.Orientation
.SortMethod
.Apply
End With
最初のWithステートメントで、Sortオブジェクトを指定しています。
次の.SortFieldsはコレクション(オブジェクトの配列)です。
先にClearメソッドでSortFieldsを空にして、その後、Addメソッドでソート対象を追加していきます。
ここでは1つしか追加していませんが、ソート対象は複数指定できます。
SetRangeプロパティは、ソートするデータセルを指定します。
Headerプロパティは、先頭をヘッダー扱いにするかどうかの指定。
MatchCaseプロパティは、大文字小文字の区別をするかどうかの指定。
Orientationプロパティは、行単位、列単位の指定。
SortMethodプロパティは、昇順、降順の指定になります。
最後の Apply は実行メソッドです。
それぞれのプロパティやメソッドを詳しく見ていきましょう。
Sortオブジェクト
Sortオブジェクトの主なプロパティとメソッドは以下の通りです。たくさんあって複雑な感じですが、数が多いだけで、それほど難しくはありません。
SortFieldsコレクション
SortFieldsは、並べ替えキー設定で、オブジェクト配列となります。配列なので並べ替えキー設定は複数持つ事ができ、クリアする事もできます。
基本的な使い方としては、最初にクリアしておいて、Addで追加していきます。並べ替えキーを複数設定する場合は、最初のキーが優先順位が高くなります。
Clearメソッド
SortFieldsコレクションを空にして、キー設定をクリアします。
Addメソッド
並べ替えキー設定を行います。 key 以外の引数は省略可能です。
SortFields.Add ( key [, sorton, order, customorder, dataoption ] )
key 並べ替える場所指定
Range型で指定します。複数セル指定するとエラーとなる場合があります。
Cellsで指定してもOKです。
sorton 並べ替え値の指定
xlSortOn 列挙型で指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlSortOnValues | 0 | 値 |
xlSortOnCellColor | 1 | セル色 |
xlSortOnCellColor | 2 | フォント色 |
xlSortOnIcon | 3 | アイコン |
order 並び替え順の指定
XlSortOrder 列挙型で指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlAscending | 0 | 昇順 【既定値】 |
xlDescending | 1 | 降順 |
customorder 並べ替え基準の指定
並べ替えたい順序をユーザーが指定できます。値はカンマ区切りの文字列で指定します。
(上記のサンプルプログラムでは省略しています。)
例: CustomOrder:=”日,月,火,水,木,金,土”
dataoption 値による並べ替え指定
XlSortDataOption 列挙型で指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlSortNormal | 0 | 数値とテキストを別々に並べ替える 【既定値】 |
xlSortTextAsNumbers | 1 | 数値とテキストを混同して並べ替える |
SetRange ソートするデータセルを指定
並べ替えを行うデータセル範囲を指定します。ここは例のように左上のセルを指定して CurrentRegion で指定する方法が良く使われます。
例: Range(“A1”).CurrentRegion
Header 先頭をヘッダー扱いにするか指定
データセルの先頭をヘッダーとして扱うかを指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlGuess | 0 | 自動的に設定する |
xlYes | 1 | 見出しとして使用する |
xlNo | 2 | 見出しとして使用しない(範囲全体が対象となる)【既定値】 |
MatchCase 大文字小文字の区別をするか指定
大文字小文字の区別をBoolean型で指定します。
大文字と小文字を区別するときは True。 区別しない場合は False を指定します。
Orientation 並べ替えの方向指定
XlSortOrientation 列挙型で指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlTopToBottom (または、xlSortColumns) | 1 | 行方向で並べ替え【既定値】 |
xlLeftToRight (または、xlSortRows) | 2 | 列方向で並べ替え |
SortMethod 昇順、降順の指定
XlSortMethod 列挙型で指定します。
定 数 | 値 | 内 容 |
---|---|---|
xlPinYin | 1 | ふりがなを使って並べ替え【既定値】 |
xlStroke | 2 | ふりがなを使わずに並べ替え |
並べ替えキーを複数指定する方法
複数の並べ替えキーを指定したい場合は、SortFieldsコレクションで、Addメソッドを追加するだけです。
上記のプログラムでC列でソートした後に、D列をソートするには以下の様にします。
Sub SortSample2()
Dim sh As Worksheet
Set sh = Worksheets("売上")
With sh.Sort
With .SortFields
.Clear '全ての並べ替えのキー設定をクリア
'【ソート対象を追加】
.Add Key:=sh.Range("C1"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'Key;ソート対象列のセル指定
'SortOn;ソート対象[xlSortOnValues(値),xlSortOnCellColor(セル色).
' xlSortOnFontColor(フォント色),xlSortOnValues(アイコン)]
'Order;ソート順[xlAscending(昇順),xlDescending(降順)]
'DataOption;数値とテキスト[xlSortNormal(同じに扱う)
' ,xlSortTextAsNumbers(別で扱う)]
'【ソート対象を追加】
.Add Key:=sh.Range("D1"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
End With
.SetRange sh.Range("A1").CurrentRegion '並べ替えの対象範囲を設定
.Header = xlYes '先頭行を見出しとして使用するか
.MatchCase = False '大文字小文字の区別をするか
.Orientation = xlTopToBottom '行単位で並べ替え(既定値)
.SortMethod = xlPinYin 'ふりがなを使って並べ替える(既定値)
.Apply '実行
End With
End Sub
結果は以下の様になります。C列で並べ替えた後に、D列が昇順となっています。

まとめ
今回はデータセル並べ替えを行う Sort オブジェクトを解説しました。使い方の注意点としては、起点となるRange指定が対象のシートになっているかに気を配るようにしましょう。
エラーとなったり、動作がおかしい場合は、サンプルの下線で示した箇所が適正であるか確認してみてください。
サンプルコードはコピーして変更すれば使えると思いますので活用してください。