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セルから始まる表範囲を参照して、With【ウィズ】ステートメントで指定します。


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行目
【.Add myrange.Columns(1), xlSortOnValues, xlAscending
.Add myrange.Columns(2), xlSortOnValues, xlAscending
.Add myrange.Columns(3), xlSortOnValues, xlAscending
.Add myrange.Columns(4), xlSortOnValues, xlAscending】

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


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


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


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

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

スポンサーリンク

関連記事・広告