Excel VBA データを並べ替える

スポンサーリンク
スポンサーリンク

データを並べ替える方法

データを並べ替えるには
Rangeオブジェクトの
Sort【ソート】メソッドを使用する方法と
Sort【ソート】オブジェクトを使用する方法の
2つの方法があります。

Sort【ソート】メソッドは、引数に設定ができ
とてもシンプルな構文で
簡単に使用できるメリットがありますが
セルの値の並べ替えしかできません。

Sort【ソート】オブジェクトは、各メソッドや
プロパティを使用して、並べ替えの設定をするので
複雑になりがちですが、セルの値だけでなく
セルの色やフォントの色、セルのアイコンを基準として
並べ替えができます。

Sort【ソート】メソッド

データを並べ替えるには
Range【レンジ】オブジェクトの
Sort【ソート】メソッドを使用します。
引数Key1、Key2、Key3を指定して
一度に3つの列を基準に並べ替えの実行ができますが
いっぺんに列の優先度を指定しないで
優先度の低い列順にSort【ソート】をしていけば
結果的に複数の列の値を基準にした
並べ替えができます。

Sort【ソート】メソッドの書式

[]内は省略可能です。
オブジェクト.Sort( [Key1, Order1, Key2, Type, Order2, Key3, Order3,
Header, OrderCustom, MatchCase, Orientation, SortMethod,
DataOption1, DateOption2, DateOption3] )


設定値(引数)の説明

  • オブジェクト(必須)
    並べ替えるセル範囲をRangeオブジェクトで指定します。
    単一のセルを指定した場合は
    そのセルを含む「アクティブセル領域」が対象になります。
  • Key1【キーワン】(省略可)
    最優先で並べ替える列を指定します。
  • Order1【オーダーワン】
    引数Key1で指定した列の並べ替え順を
    XlSortOder列挙型の定数で指定します。

    XlSortOder列挙型の定数
    定数内容
    xlAscending1昇順で並べ替えます。(既定値)
    xlDescending2降順で並べ替えます。
  • Key2【キーツゥ】(省略可)
    2番目に優先して並べ替える列を指定します。
  • Type【タイプ】(省略可)
    ピボットテーブルレポートを並べ替える場合に使用します。
    XlSortType列挙型の定数で指定します。

    XlSortType列挙型の定数
    定数内容
    xlSortLabelsラベルを基準にしてを並べ替えます。
    xlSortValues値を基準にして並べ替えます。
  • Order2【オーダーツゥ】(省略可)
    引数Key2で指定した列の並べ替え順を
    XlSortOder列挙型の定数で指定します。
  • Key3【キースリー】(省略可)
    3番目に優先して並べ替える列を指定します。
  • Order3【オーダースリー】(省略可)
    引数Key3で指定した列の並べ替え順を
    XlSortOder列挙型の定数で指定します。
  • Header【ヘッダー】(省略可)
    指定範囲の1行目を見出しとするかどうかを
    XlYesNoGuess列挙型の定数で指定します。

    XlYesNoGuess列挙型の定数
    定数内容
    xlGuess0見出しがあるかどうか Excel が判断します。
    xlYes11行目を見出しとして
    1行目を除いた指定範囲を並べ替えます。
    xlNo21行目を見出しとせず
    指定範囲全体を並べ替えます。(既定値)
  • OrderCustom【オーダーカスタム】(省略可)
    ユーザー設定リストのリスト内の順番を整数で指定します。
  • MatchCase【マッチケース】(省略可)
    大文字と小文字を区別するかしないかを指定します。

    設定値内容
    False区別しない(既定値)
    True区別する
  • Orientation【オリエンティーション】(省略可)
    並べ替えの単位をXlSortOrientation列挙型の定数で指定します。

    XlSortOrientation列挙型の定数
    定数内容
    xlSortColumns1列単位で並べ替えます。
    xlSortRows2行単位で並べ替えます。
  • SortMethod【ソートメソッド】(省略可)
    日本語の並べ替えの方法をXlSortMethod列挙型の定数で指定します。

    XlSortMethod列挙型の定数
    定数内容
    xlPinYin1ふりがな順に並べ替え(既定値)
    xlStroke2各文字の総画数で並べ替え
  • DataOption1【データオプションワン】(省略可)
    引数Key1で指定した列のテキストの並べ替え方法を
    XlSortDataOption列挙型の定数で指定します。
  • DataOption2【データオプションツゥ】(省略可)
    引数Key2で指定した列のテキストの並べ替え方法を
    XlSortDataOption列挙型の定数で指定します。
  • DataOption3【データオプションスリー】(省略可)
    引数Key3で指定した列のテキストの並べ替え方法を
    XlSortDataOption列挙型の定数で指定します。

    XlSortDataOption列挙型の定数
    定数内容
    xlSortNormal(既定値)0数値データとテキスト データを別々に並べ替えます。
    xlSortTextAsNumbers1テキストを数値データとして並べ替えます。

Sortメソッドで複数の条件で並べ替えるコード例

Sub 並べ替え()
With Range("A1").CurrentRegion
  .Sort key1:=.Columns(4), order1:=xlAscending, Header:=xlYes
  .Sort key1:=.Columns(3), order1:=xlAscending, Header:=xlYes
  .Sort key1:=.Columns(2), order1:=xlAscending, Header:=xlYes
  .Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlYes
End With
End Sub

コードの解説

2行目
【 With Range(“A1”).CurrentRegion 】
CurrentRegion(カレントリージョン)プロパティでA1セルから始まる表範囲を
選択しています。


3行目~6行目
【.Sort key1:=.Columns(4), order1:=xlAscending, Header:=xlYes
.Sort key1:=.Columns(3), order1:=xlAscending, Header:=xlYes
.Sort key1:=.Columns(2), order1:=xlAscending, Header:=xlYes
.Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlYes】

Sortメソッドで初めに4列目を昇順で並べ替えをし次に3列目、2列目とし
最終的に1列目を昇順で並べ替えを行い1列目を最優先ので昇順の並べ替え
を実行します。


Sort【ソート】プロパティ

さまざまなデータの並べ替えを表す
Sort【ソート】オブジェクトを取得するには
WorkSheetオブジェクトの
Sort【ソート】プロパティを使用します。

Sort【ソート】オブジェクトを使用すると
値だけではなく、セルや文字の色、アイコンを
基準にして並べ替えが行えるほか
並べ替えの基準を最大64まで指定可能です。

Sort【ソート】プロパティで取得した
Sort【ソート】オブジェクトの各種メソッドやプロパティを
使用して並べ替えの設定を行います。

Sort【ソート】プロパティの書式

オブジェクト.Sort


設定値の説明

  • オブジェクト(必須)
    WorkSheetオブジェクトを指定します。
    表がテーブルに変換されている場合は
    ListObjectオブジェクトまたはQueryTableオブジェクトを指定します。

Sortオブジェクトの主なメソッド

  • Apply【アプリ】メソッド
    並べ替えを実行します。
  • SetRange【セットレンジ】メソッド
    並べ替えるセル範囲をRangeオブジェクトで指定します。

Sortオブジェクトの主なプロパティ

  • Header【ヘッダー】プロパティ
    指定範囲の1行目を見出しとするかどうかを
    XlYesNoGuess列挙型の定数で設定します。
    値の設定と取得ができます。

    XlYesNoGuess列挙型の定数
    定数内容
    xlGuess0見出しがあるかどうか Excel が判断します。
    xlYes11行目を見出しとして
    1行目を除いた指定範囲を並べ替えます。
    xlNo21行目を見出しとせず
    指定範囲全体を並べ替えます。(既定値)
  • MatchCase【マッチケース】プロパティ
    大文字と小文字を区別するかしないかを指定します。
    値の設定と取得ができます。

    設定値内容
    False区別しない(既定値)
    True区別する
  • Orientation【オリエンティーション】プロパティ
    並べ替えの単位をXlSortOrientation列挙型の定数で指定します。
    値の設定と取得ができます。

    XlSortOrientation列挙型の定数
    定数内容
    xlSortColumns1列単位で並べ替えます。
    xlSortRows2行単位で並べ替えます。
  • SortFields【ソートフィールズ】プロパティ
    並べ替えフィールドの集まりを表す
    SortFields【ソートフィールズ】コレクションを取得します。
  • SortMethod【ソートメソッド】プロパティ
    日本語の並べ替えの方法をXlSortMethod列挙型の定数で指定します。
    値の設定と取得ができます。

    XlSortMethod列挙型の定数
    定数内容
    xlPinYin1ふりがな順に並べ替え(既定値)
    xlStroke2各文字の総画数で並べ替え

SortFields.Add【ソートフィールズアド】メソッド

Sort【ソート】オブジェクトを使用して並べ替えを実行するには
SortFields【ソートフィールズ】コレクションの
Add【アド】メソッドを使用して
並べ替えのフィールドを表す
SortField【ソートフィールド】オブジェクトを追加する必要があります。
SortField【ソートフィールド】オブジェクトは
1つの並べ替えフィールドや並べ替え方法の情報を持ちます。

Add【アド】メソッドは、SortField【ソートフィールド】オブジェクトを
作成し、作成したSortField【ソートフィールド】オブジェクトを返します。

先に追加したSortField【ソートフィールド】オブジェクトは
後に追加したSortField【ソートフィールド】オブジェクトよりも
並べ替えの優先順位が高くなります。

SortFields【ソートフィールズ】コレクションには
SortField【ソートフィールド】オブジェクトを64個まで追加できます。

SortFields.Add【ソートフィールズアド】メソッドの書式

[]内は省略可能です。
オブジェクト.Add( Key, [SortOn, Order, CustomOrder, DataOption] )


  • オブジェクト(必須)
    SortFields【ソートフィールズ】コレクションを指定します。
    SortFields【ソートフィールズ】コレクションはSort【ソート】オブジェクトの
    SortFields【ソートフィールズ】プロパティで取得します。
  • Key【キー】(必須)
    並べ替えの基準とするフィールド(列)のセルまたは列を
    Rangeオブジェクトで指定します。
  • SortOn【ソートオン】(省略可)
    並べ替えの基準をXlSortOn列挙型の定数で指定します。

    XlSortOn列挙型の定数
    定数内容
    SortOnValues0(既定値)
    SortOnCellColor1セルの色
    SortOnFontColor2フォントの色
    SortOnIcon3アイコン
  • Order【オーダー】(省略可)
    並べ替えの順序をXlSortOrder列挙型の定数で指定します。

    XlSortOder列挙型の定数
    定数内容
    xlAscending1昇順で並べ替えます。(既定値)
    xlDescending2降順で並べ替えます。
  • CustomOrder【カスタムオーダー】(省略可)
    ユーザー定義の並べ替えの順番を文字列で指定するか
    「ユーザー設定リスト」ダイアログボックスのリスト上
    からの順番を数値で指定します。
  • DataOption【データオプション】(省略可)
    テキストを並べ替える方法をXlSortDataOption列挙型の定数で指定します。

    XlSortDataOption列挙型の定数
    定数内容
    xlSortNormal(既定値)0数値データとテキスト データを別々に並べ替えます。
    xlSortTextAsNumbers1テキストを数値データとして並べ替えます。

※追加したSortFieldオブジェクトは並べ替え実行後も保存されています。
そのため、次にAddメソッドでSortFieldオブジェクトを追加すると
保存されている並べ替えの次に追加され、優先準備が低くなります。
正しく並べ替えを実行するためには
SortFields【ソートフィールズ】コレクションの
Clear【クリア】メソッドで保存されている並べ替えの設定を
削除してから、Addメソッドで新たな並べ替えを追加します。


Sortオブジェクトで複数の条件で並べ替えるコード例

Sub 並べ替え2()
Dim myrange As Range
Set myrange = Range("A1").CurrentRegion
With ActiveSheet. Sort
 With .SortFields
      .Clear
      .Add myrange.Columns(1), xlSortOnValues, xlAscending
      .Add myrange.Columns(2), xlSortOnValues, xlAscending
      .Add myrange.Columns(3), xlSortOnValues, xlAscending
      .Add myrange.Columns(4), xlSortOnValues, xlAscending
  End With
 .SetRange myrange
 .Header = xlYes
 .Apply
End With
End Sub

コードの解説

2行目
【 Dim myrange As Range 】

並べ替えのセル範囲を格納する
変数「myrange」をオブジェクト型(Range)で宣言します。


3行目
【 Set myrange = Range(“A1”).CurrentRegion 】

RangeオブジェクトのCurrentRegion【カレントリージョン】プロパティ
を使用してA1セルからはじまる表範囲を参照して
オブジェクト変数「myrange」にSet【セット】キーワードを
使用して代入します。


4行目
【 With ActiveSheet.Sort 】
Sort【ソート】プロパティを使用して
Sort【ソート】オブジェクトを取得し
Withステートメントで指定します。


5行目
【 With .SortFields 】
Sort【ソート】オブジェクトの
SortFields【ソートフィールズ】プロパティを使用して
SortFields【ソートフィールズ】コレクションを取得して
Withステートメントで指定します。


6行目
【 .Clear 】
SortFields【ソートフィールズ】コレクションの
Clear(クリア)メソッドで前回の並べ替えの設定をクリアします。


7行目~10行目
SortFieldsコレクションのAddメソッドで並び替え対象を指定します。
Sortメソッドと違い並び替えの優先順位が高い順から宣言します。


12行目
【.SetRange myrange】

Sort【ソート】オブジェクトの
SetRange【セットレンジ】メソッドに
並べ替えるセル範囲が格納されている
オブジェクト変数「myrange」を指定します。


13行目
【.Header = xlYes】

Sort【ソート】オブジェクトの
Header【ヘッダー】プロパティに
1行目を見出し行と表す
xlYesを設定します。


14行目
【 .Apply】

Sort【ソート】オブジェクトの
Apply【アプリ】メソッドで並べ替えを実行します。


以上で Sortメソッド Sortオブジェクトを利用した
並べ替えについての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク