VBA入門並べ替え(Sort)
並べ替えは、データ処理の基本中の基本です。乱雑なデータを並べ替えることはデータ処理の第一歩です。マクロVBAで並べ替えを実行するには、シート操作の「並べ替え」の機能を使用することになります。そもそもデータを並べ替えるという事は、そのデータのキーが何かを考えるという事です。
Sub サンプル1() With ActiveSheet .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range("A1"), Order:=xlAscending .Sort.SortFields.Add Key:=.Range("B1"), Order:=xlAscending .Sort.SetRange .Range("A1:J11") .Sort.Header = xlYes .Sort.Apply End With End Sub '以下はWith記述を少し変更したサンプルとなります。 Sub サンプル2() Dim ws As Worksheet Set ws = ActiveSheet With ws.Sort With .SortFields .Clear .Add Key:=ws.Range("A1"), Order:=xlAscending .Add Key:=ws.Range("B1"), Order:=xlAscending End With .SetRange ws.Range("A1:J11") .Header = xlYes .Apply End With End Sub
Sortオブジェクトとなった為、非常に分かりづらくなりました。 オブジェクトのメンバー(オブジェクトに含まれるプロパティ・メソッド)を理解して使う必要があります。 Sortオブジェクトのメンバーの中でも特に重要かつ複雑なSortFieldsは、 SortFieldオブジェクトのコレクションです。 SortFieldsコレクションのメンバー 名前 説明 メソッド Add 新しい並べ替えフィールドを作成し、SortFieldsオブジェクトを返します。 Add(Key, SortOn, Order, CustomOrder, DataOption) Add2 新しい並べ替えフィールドを作成し、SortFieldsオブジェクトを返します。 2016以降に追加されました。 Add2(Key, SortOn, Order, CustomOrder, DataOption, SubField) Clear SortFieldsオブジェクトをすべてクリアします。 プロパティ Application オブジェクト修飾子を指定せずに使用した場合、MicrosoftExcelアプリケーションを表すApplicationオブジェクトを返します。 オブジェクト修飾子を指定した場合、指定したオブジェクトを作成したApplicationオブジェクトを返します。値の取得のみ可能です。 Count コレクションに含まれるオブジェクトの数を返します。 値の取得のみ可能です。長整数型(Long)の値を使用します。 Creator 現在のオブジェクトが作成されたアプリケーションを示す32ビットの整数を取得します。 値の取得のみ可能です。長整数型(Long)の値を使用します。 Item ブックで並べ替えられるアイテムのコレクションを表すSortFieldオブジェクトを返します。 値の取得のみ可能です。 Parent 指定されたオブジェクトの親オブジェクトを取得します。 値の取得のみ可能です。 Sortオブジェクトの基本的な使い方 ワークシートオブジェクト.Sort これで、Sortオブジェクトを取得します。 このSortオブジェクトに対して、 以下の順に、メソッドの実行、プロパティ値の設定を行います。・.SortFields.Clearメソッドで、前回の情報を消去 ・.SortFields.Addメソッドで、並べ替えのキーを追加 ・.SetRangeで、並べ替えの範囲を設定 ・.Headerで、行ヘッダーの有無を指定 ・.Applyで、並べ替えを実行
定型文として覚えると良いでしょう。 並べ替えのキー、範囲、 この部分のみ変更すれば多くの場合はほぼそのまま使いまわせるはずです。 Excel2003までのSortとExcel2007以降のSortの使い分け どちらを使っても構いません。 最も大きな違いは、 Excel2003までのSortは、並べ替えのキーが3つまでしか指定出来ない事です。 Excel2007以降のSortは、並べ替えのキーの数は(64個の制限はありますが実質)無制限です。 ですが、そもそも並べ替えというものの本質がどうなっているかを考えてみましょう。 複数列で並べ替えるという事は、 下位のキーから順に並べ替えれば良いという事を理解してください。 A列 > B列 > C列 > D列 この順で並べ替える場合、一度に並べ替えなくても、 以下の順に、1列ずつ並べ替えても結果は同じです。 ・D列で並べ替え ・C列で並べ替え ・B列で並べ替え ・A列で並べ替え 従って、Excel2003までのSortでも4つ以上のキーで並べ替えは可能だという事を理解してください。 これを理解することは、 データを整理するとはどういう事かを理解する事にもなります。 以下も参考にして下さい。 「マクロの記録で覚えるVBA」の第17回.並べ替え 大量データで処理時間がかかる関数の対処方法(SumIf)・大量データで処理時間がかかるサンプルデータ ・普通にマクロVBAコ-ドを書いた場合 ・指定範囲を絞ってみる ・配列を使って書いてみる ・アルゴリズムを考えてみる ・Dictionary(連想配列)を使う ・大量データで処理時間がかかる関数の対処方法の最後に ・XLOOKUP+SORTが最強だった … 後日追加(2025/11/4)
同じテーマ「マクロVBA入門」の記事 新着記事 NEW ・・・新着記事一覧を見る アクセスランキング ・・・ ランキング一覧を見る このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。 掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。 本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。 This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.