※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。
 当ブログを経由しての商品の購入や、サービスの申し込みが発生すると提携企業からの成果報酬を受けとる場合があります。

エクセルVBA|Sort(ソート)をつかったマクロでセルやデータの並べ替えをする

 エクセルにはデータを並べ替える(ソート)機能がありますが、あいうえお順や日付や価格などが書きこまれたデータを整理する時に便利ですよね。

この並べ替えのときに、数値の小さいものから並べることを昇順と呼び、逆に大きいものから並べることを降順と言います。

 仕事や作業で大量のデータが入力された表において、なにかの値を切り口にしたときにどういった並びになっているかを調べたいことってありますよね?

例えば、社員の年齢が若いものから並べる顧客リストで予約が入った日付順に並べる商品リストの在庫数が多いものから並べるなど、データを並べ替えたいことがしばしばあったりします。

とくにビジネスでは、過去のデータを分析することで今後の見通しを予測し、戦略や方針を打ち出すこともされることがあるでしょう。

このことからも、データの並べ替えは作業や業務などでデータ管理をしている人はかならずおぼえておきたい機能だとも言えます。

 今回の記事では、エクセルの並べ替え機能(ソート)とVBAでコードを書いて並べ替え(ソート)をするマクロの作りかたを紹介したいと思います。

 あなたの作業や仕事で使えそうな内容がありましたら、ぜひ利用してみてください。

Sort(ソート)は、セルやデータを並べ替えられるとても便利な機能だよ。

独学だと中々スキルが身についた実感が湧かない。学習環境を見直してみませんか?

エクセルで繰り返しや転記作業で苦しい思いをした経験はありませんか?
今まで苦労してきたその作業を簡単なプログラムをおぼえるだけで解決できる可能性があります。
なるべくお金や時間をかけずにエクセルマクロVBAを習得したい人にはこちらの「1日速習講座」がおすすめです。

エクセルで並べ替え(ソート)機能をつかう方法

 まずは、エクセルの並べ替え(ソート)機能をおさらいです。

エクセルの表でデータの並べ替え(ソート)機能をつかうためには、以下の手順で実施します。

昇順・降順ボタンをつかった並べ替え(ソート)方法

  1. エクセルのワークシート画面にて並べ替えたい列のセルを選択します。
  2. [データ]タブを選択します。
  3. [昇順]ボタン・[降順]ボタンを選択します。
エクセルソート方法の画像

 こちらで紹介している並べ替え機能の他、表の並べ替え(ソート)や、条件に当てはまったデータの抽出をしたいときは、Excelのフィルター機能も手軽に使えておすすめです。

Excelのフィルター機能の使いかたについては、こちらの記事で詳しく解説していますのであわせてチェックしてみてください。

フィルター機能は、Excelで表を管理する人は使わないと損をする。と言えるほど優秀な機能だよ。

並べ替えボタンをつかった並べ替え(ソート)方法

  1. エクセルのワークシート画面にて並べ替えたい列のセルを選択します。
  2. [データ]タブを選択します。
  3. [並べ替え]ボタンを選択します。
  4. 並べ替えウィンドウで[先頭行をデータの見出しとして使用する]に✅する
  5. 並べ替えウィンドウの[]より並べ替え(ソート)をしたい見出しを選択する
  6. 並べ替えウィンドウの[順序]より並べ替え(ソート)をする方法を選択する
  7. 並べ替えウィンドウの[OK]を選択する
エクセルソート方法の画像2
列の値がひらがな・カタカナ、アルファベットのデータも昇順・降順で並べ替えができます。

ユーザー定義の順番に並べ替え(ソート)をする方法

 エクセルの並べ替え(ソート)機能では、ユーザー定義で登録した順番に並べ替えることができます。

これは文字通り並べたい順を登録しておくことで、その順に並べる機能ですが、例えば、本のジャンルがデータとして入力されたが列があるとして、辞書」 ➡ 「小説」 ➡ 「ビジネス書」 ➡ 「雑誌 と並べ替えをしたい場合など、数字や日付のように序列をもたない値も、ユーザー定義をすることで指定どおりに並べ替え(ソート)ができます。

エクセルソート方法の画像3(ユーザー定義の設定方法)

リストの項目で値を書き込む順序で並べ替え(ソート)方法が指定できます。

リストの項目を書き込む方法

自分の好きな順序で並べ替え(ソート)ができるって便利だよね。

並べ替え(ソート)をするキーを追加して条件をかさねて設定する

 並べ替えウィンドウで[レベルの追加]を選択すると、並べ替えの条件を重ねて設定できます。

●具体的な例(ユーザー定義と大きい順の組み合わせ)

並べ替えのキー 順序
最優先されるキー 商品カテゴリ 食品,日用品,家電,ファッション,スポーツ用品
次に優先されるキー 販売価格 大きい順
※最優先されるキーは商品カテゴリの”ユーザー定義”を指定、次に優先されるキーで販売価格の”大きい順”を指定。

商品カテゴリごとに販売価格が高いものから順番に並べ替えるよ。

エクセル・ワード・パワーポイントのオンライン学習
料金負担が安いのになんど見ても追加費用は不要!
安心の環境でしっかりとスキルをつけたいならPCHack

↓↓↓くわしくはこちら↓↓↓

エクセルVBAで並べ替え(ソート)するマクロをつくる方法

 ここからは、VBAで並べ替え(ソート)の機能をつかう方法を紹介します。
VBAでは『Sortメソッド』と、『Sortオブジェクト』の2つをつかって並べ替え(ソート)ができます。

Sort(ソート)メソッドをつかった並べ替え

 セルの並べ替えをするためには、Sortメソッドを利用します。

SortメソッドはRangeオブジェクトで使える処理となるので、オブジェクトとしてセル範囲を指定します。

また、引数のパラメーター(設定値)を指定、組み合わせることで並べ方を詳しく設定できます。

基本構文とパラメーターについてみていきましょう。

Sort(ソート)メソッドの構文

Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)

Sortメソッドの引数はすべて省略できるから必要なものだけで大丈夫。

Sort(ソート)メソッドの引数について

 Sortメソッドであつかう引数は以下のとおりです。

名前 必須/省略可 設定値 説明
Key1 省略可 バリアント 最優先されるキーをRangeによるセル範囲で指定します。
Order1 省略可 xlAscending
or
xlDescending
or
xlManual
Key1の並べ替え方法を指定します。昇順・降順・手動の何れかで指定します。
Key2 省略可 バリアント 2番目に優先されるキーをRangeによるセル範囲を指定します。
Type 省略可 バリアント ピボットテーブル内で並べ替える要素の種類を指定します。
Order2 省略可 xlAscending
or
xlDescending
or
xlManual
Key2の並べ替え方法を指定します。昇順・降順・手動の何れかで指定します。
Key3 省略可 バリアント 3番目に優先されるキーをRangeによるセル範囲を指定します。
Order3 省略可 xlAscending
or
xlDescending
or
xlManual
Key3の並べ替え方法を指定します。昇順・降順・手動の何れかで指定します。
Header 省略可 xlGuesss
or
xlNo
or
xlYes
表の見出しの設定を指定します。Excelに判断させる・見出しなし・見出しありの何れかで指定します。
OrderCustom 省略可 バリアント ユーザー設定の並べ替え順のリスト内の番号を指定します。
MatchCase 省略可 バリアント 大文字と小文字を区別するならTrueを、しないならFalseを指定します。
Orientation 省略可 xlSortColumns
or
xlSortRows
並べ替えを対象を、列または行で指定します。
SortMethod 省略可 xlPinYin
or
xlStroke
並べ替えの方法を指定します。
中国語の発音表記の順または、各文字の総画数を指定します。
DataOption1 省略可 xlSortNormal
or
xlSortTextAsNumbers
Key1を数値と文字列を区別して並べ替えをする、または文字列も数値として並べ替えるのか設定します。
DataOption2 省略可 xlSortNormal
or
xlSortTextAsNumbers
Key2を数値と文字列を区別して並べ替えをする、または文字列も数値として並べ替えるのか設定します。
DataOption3 省略可 xlSortNormal
or
xlSortTextAsNumbers
Key3を数値と文字列を区別して並べ替えをする、または文字列も数値として並べ替えるのか設定します。
※赤文字になっている項目は初期値となります。

引数は多いけど、おぼえる必要はないよ。コードを書くときまた見にきてね♡

Sortメソッドは、条件として設定できるKeyは3つまで

 引数をみてもお分かりのとおり、Sortメソッドは、条件として設定できるKeyは3つまでとなります。

例えば、学校の生徒のデータを並べ替えるとして、学年は降順クラス番号は昇順なまえはあいうえお順などの3つの要素の並べ方を指定できます。

 もっとこまかい条件で並べ替え(Sort)を実行したいときは、後述のSortオブジェクトをご利用ください。

Sort(ソート)メソッドをつかったサンプルコード

 それでは、Sort(ソート)メソッドをつかったマクロのサンプルコードを見ていきましょう。

具体例があったほうがわかりやすいので、以下の表で、Sort(ソート)メソッドのサンプルコードをつかって並べ替え(ソート)してみます。

セルの並べ替え(Sort)を実施するサンプルデータの画像

並べ替え(ソート)をするマクロのVBAコード

  
Option Explicit

Sub Sort_test()
    With ThisWorkbook.Worksheets("Sort_test")
        .Range("A1:H11").Sort key1:=Range("A1"), Order1:=xlDescending, Header:=xlYes
    End With
End Sub

05行目

A1からH11のセル範囲をオブジェクトに指定して、Sort(ソート)メソッドを使います。

並べ替える順序は、A列(商品ID)を大きいものから並べます(降順)。

今回利用している表は先頭行が見出しになっているため、引数のHeaderは見出しありの”xlYes“をを指定しています。

A列(商品ID)を、降順で並べ替えるよ。

実行結果は以下のとおりです。

VBAでExcelの表を並べ替えた結果の画像

商品IDの大きいものから順に並べ替えられたね。


Sort(ソート)オブジェクトをつかった並べ替え

 SortオブジェクトもSortメソッドと同じように表にあるデータを並べ替えることができます。

古いエクセル(Excel2007以前)をつかっている場合は、Sortオブジェクトが使えません。

その場合はSortメソッドを利用して並べ替えをしてください。

Sort(ソート)オブジェクトとは

 Sortオブジェクトはデータをビルドして並べ替え(ソート)ができます。

Sortオブジェクトにはメソッドプロパティがあり、これらを設定することでデータの並べ替えが実行できます。

なお、Sortオブジェクトは並べ替えの条件となるKeyが64個まで指定が可能です。

Sortオブジェクトは、Sortメソッドが進化したものだと言えるね。

Sort(ソート)オブジェクトのメソッド

 Sortオブジェクトのメソッドは以下の2つです。

メソッドの種類 説明
Apply 並べ替えを実行します。
SetRange 並べ替えをする範囲を指定します。

Sortオブジェクトのメソッドは”範囲の指定”と”実行”だね。

Sort(ソート)オブジェクトのプロパティ

 プロパティの以下のとおり、設定値などはSortメソッドと同じです。
下記の表のもの以外にも、Application、Creatorプロパティなどが存在しますが、使用する場面があまりないためここでは割愛しています。

プロパティの種類 設定値 説明
Header xlGuesss
or
xlNo
or
xlYes
先頭行に見出しがあるかを指定します。
MatchCase True
or
False
大文字と小文字を区別するかを指定します。
Orientation xlSortColumns
or
xlSortRows
並べ替えを対象を、列または行で指定します。
SortFields Addメソッドで並べ替えのキー、フィールド、順序などを指定(※詳細は後述) SortFieldオブジェクトのコレクション
SortMethod xlPinYin
or
xlStroke
並べ替えの方法を指定します。中国語の発音表記の順または、各文字の総画数を指定します。
※最優先されるキーは商品カテゴリの”ユーザー定義”を指定、次に優先されるキーで販売価格の”大きい順”を指定。

SortFieldsオブジェクトのAddメソッド

 SortFieldsオブジェクトのAddメソッドで並べ替えのキーの追加や、順序をパラメーターで指定します。

パラメーターの種類 必須/省略可 設定値 説明
Key 必須 セル範囲 キーをRangeによるセル範囲で指定します。
SortOn 省略可 xlSortOnCellColor
or
xlSortOnFontColor
or
xlSortOnIcon
or
xlSortOnValues
並べ替えの基準とする対象を指定します。
上からセル色、フォント色、アイコン、記入された値です。
Order 省略可 xlAscending
or
xlDescending
順序を指定します。上から昇順、降順です。
CustomOrder 省略可 任意の順序を記入 ユーザー定義を指定します。
DataOption 省略可 xlSortNormal
or
xlSortTextAsNumbers
数値と文字列を区別して並べ替えをする、または文字列も数値として並べ替えるのか設定します。

SortFieldsオブジェクトのAddメソッドで並べ替えの条件を指定するんだね。

Sortオブジェクトをつかったサンプルコード

 Sortオブジェクトをつかってデータを並べ替えするマクロのコードを見ていきましょう。

商品IDを降順に並べ替えするマクロ

 こちらはSortメソッドのときと同じように商品IDを降順に並べ替えをするマクロです。

並べ替え(ソート)をするマクロのVBAコード①

  
Option Explicit

Sub Sort_test2()

    'Withステートメントで並べ替えを実行するシートオブジェクトを指定する
    With ThisWorkbook.Worksheets("Sort_test").Sort

        '並べ替え(ソート)のキー設定を初期化する
        .SortFields.Clear

        '並べ替え(ソート)のキー設定(最優先されるキー)
        .SortFields.Add key:=Range("A1"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending '並べ替え(ソート)をする範囲を指定 .SetRange Range("A1:H11") '並べ替え(<ソート)をする範囲に見出しがある場合の指定 .Header = xlYes '並べ替え(ソート)を実行する .Apply End With End Sub

06行目

SortFieldsオブジェクトClearメソッドで初期化を実行します。

12行目から14行目

SortFieldsオブジェクトAddメソッドを利用して、並べ替えるフィールドにA1セルを指定しています。

さらに、SortOnパラメーターではセルの値を基準にという指定で、Orderパラメーターでは降順という並べ替えの方法を指定しています。

17行目

SortオブジェクトSetRangeメソッドに並べ替えるセル範囲を指定します。

20行目

SortオブジェクトHeaderプロパティでセル範囲に見出し行があることを指定します。

23行目

SortオブジェクトApplyメソッドで並べ替えを実行します。

Sortメソッドと同じで、商品IDを降順に並べ替えるマクロだよ。

商品カテゴリを指定の順に並べ替えるマクロ

 つづいて、商品カテゴリを並べ替えるマクロです。

並べ替える順番は、食品 ➡ 日用品 ➡ 家電 ➡ ファッション ➡ スポーツ用品 で指定しています。

並べ替え(ソート)をするマクロのVBAコード②

  
Option Explicit

Sub Sort_test3()
    'Withステートメントで並べ替えを実行するシートオブジェクトを指定する
    With ThisWorkbook.Worksheets("Sort_test").Sort
        
        '並べ替え(ソート)のキー設定を初期化する
        .SortFields.Clear
        
        '並べ替え(ソート)のキー設定(最優先されるキー)
        .SortFields.Add key:=Range("B1"), _
                        SortOn:=xlSortOnValues, _
                        CustomOrder:="食品,日用品,家電,ファッション,スポーツ用品"
        
       '並べ替え(ソート)をする範囲を指定
        .SetRange Range("A1:H11")
        
       '並べ替え(ソート)をする範囲に見出しがある場合の指定
        .Header = xlYes
        
       '並べ替え(ソート)を実行する
        .Apply
    
    End With
End Sub

11行目から13行目

SortFieldsオブジェクトAddメソッドを利用して、並べ替えるフィールドにB1セルを指定しています。

さらに、SortOnパラメーターではセルの値を基準にという指定で、CustomOrderパラメーターでは食品 ➡ 日用品 ➡ 家電 ➡ ファッション ➡ スポーツ用品という並べ替えの方法を指定しています。

Sortオブジェクトで商品カテゴリを指定の順に並べ替えるマクロだよ。

並べ替え(ソート)をするマクロのVBAコード②の実行結果

VBAでExcelの表を並べ替えた結果の画像2

商品カテゴリを"食品"、"日用品"、"家電"、"ファッション"、"スポーツ用品"の順で並べ替えたよ。

商品カテゴリが指定順で、発売日があたらしい順番に並べ替えるマクロ

 直前に紹介した、商品カテゴリを指定した順にして、さらに発売日を降順で並べ替えするマクロです。

並べかえの条件を複数列で指定するときはこちらの書きかたになります。

並べ替え(ソート)をするマクロのVBAコード③

  
Option Explicit

Sub Sort_test4()
   'Withステートメントで並べ替えを実行するシートオブジェクトを指定する
    With ThisWorkbook.Worksheets("Sort_test").Sort
        '並べ替え(ソート)のキー設定を初期化する
        .SortFields.Clear
        
       '並べ替え(ソート)のキー設定(最優先されるキー)
        .SortFields.Add key:=Range("B1"), _
            SortOn:=xlSortOnValues, _
            CustomOrder:="食品,日用品,家電,ファッション,スポーツ用品"
        
       '並べ替え(ソート)のキー設定(次に優先されるキー)
        .SortFields.Add key:=Range("G1"), _
            SortOn:=xlSortOnValues, _
            Order:=xlDescending
        
       '並べ替え(ソート)をする範囲を指定
        .SetRange Range("A1:H11")
        
        '並べ替え(ソート)をする範囲に見出しがある場合の指定
        .Header = xlYes
        
        '並べ替え(ソート)を実行する
        .Apply
    
    End With
End Sub

14行目から16行目

SortFieldsオブジェクトAddメソッドを利用して、並べ替えるフィールドにG1セルを指定しています。

SortOnパラメーターではセルの値を基準にという指定で、Orderパラメーターでは降順(新しいものから古いもの)という並べ替えの方法を指定しています。

 これにより、商品カテゴリは指定した条件かつ、商品カテゴリごとに新しく発売された順に並び替わります。

並べ替えの条件を組み合わせて指定してみたよ。

並べ替え(ソート)をするマクロのVBAコード③の実行結果

VBAでExcelの表を並べ替えた結果の画像3

商品カテゴリごとに発売日があたらしいものの順になったね。

配列や辞書の要素を並べ替える(ソート)

 こんどは、配列辞書(Dictionaryオブジェクト)の要素の並べ替え(ソート)をするマクロを紹介します。

配列内のデータを並べ替える(ソート)方法ですが、配列や辞書内の要素を、直接並べ替える(ソート)する方法と、一度セルに出力したデータを並べ替え(ソート)をする方法があります。

ここでは、比較的に簡単にマクロにできる『セルに出力する方法』をつかって、配列と辞書の要素の並べ替え(ソート)をするサンプルコードを紹介します。

 まずは、処理をしていく大まかなながれをみておきましょう。

  1. 配列・辞書データをつくる
  2. 配列や辞書データをExcelのワークシートに書き出す
  3. Sortオブジェクトでワークシートに書き出したデータを並べ替え(ソート)をする
  4. 並べ替え(ソート)した表を、配列や辞書に代入する

配列や辞書もセルに出力して並べ替えるマクロなら比較的かんたんに作れるよ。

配列に代入したデータをデータをSortオブジェクトで並べ替える

 これまではエクセルのワークシートの表にあるデータの並べ替えをしました。

当然ですが、ワークシートにある表を並べ替えられるなら配列に代入されている要素(データ)を並べ替える(ソート)こともできます。

 配列のデータを並べ替えるマクロを作成したいときはこちらを参考にしてください。

※配列とはたくさんの変数をまとめてあつかうことができるもので変数のかたまりのようなものです。

配列の並べ替え(ソート)をするマクロのVBAコード①

  
Option Explicit

Sub Sort_test5()

'配列の宣言
Dim arr(4, 1) As Variant

'配列1列目の要素を代入
arr(0, 0) = "いちご"
arr(1, 0) = "ランニングシューズ"
arr(2, 0) = "ボディソープ"
arr(3, 0) = "ジーンズ"
arr(4, 0) = "テレビ"

'配列2列目の要素を代入
arr(0, 1) = 150
arr(1, 1) = 12000
arr(2, 1) = 350
arr(3, 1) = 5000
arr(4, 1) = 70000

'繰り返し処理用(カウンタ)の変数を宣言する
Dim i As Integer

'======================
'配列データをワークシートに書き出す
'======================
With ThisWorkbook.Worksheets("Sort_test2")
'arrの要素数分(5回)を繰り返す。
    For i = 0 To UBound(arr)
        .Cells(i + 2, 1).Value = arr(i, 0)
        .Cells(i + 2, 2).Value = arr(i, 1)
    Next i
    
'======================
'並べ替え(Sort)の処理
'======================
    With .Sort
        '並べ替え(Sort)を条件を初期化
        .SortFields.Clear
        
        '2列目(販売価格)が高いものから並べ替え
        .SortFields.Add key:=Range("B1"), _
            Order:=xlDescending
            
        .Header = xlYes
    '配列の最大インデックスとセル範囲の差分のため+2をする
        .SetRange Range("A1:B" & UBound(arr) + 2) 
        .Apply
    End With
    
'======================
'並べ替えた後の表を配列(arr)に代入する
'======================
    For i = 2 To .Cells(Rows.count, 1).End(xlUp).row
        arr(i - 2, 0) = .Cells(i, 1).Value
        arr(i - 2, 1) = .Cells(i, 2).Value
    Next i
    
End With

End Sub

06行目

配列データを格納する変数としてarrを静的配列で宣言しています。
arrの要素数は4、1と指定しているため、5行2列の表になっています。

09行目から13行目

配列arrに要素を追加しています。エクセルのワークシートで言えば、A列の1行目に"いちご"、2行目に"ランニングシューズ"…と商品名を入力していくイメージです。

16行目から20行目

配列arrにさらに要素を追加しています。エクセルのワークシートで言えば、B列の1行目に"150"、2行目に"12000"…と販売価格を入力していくイメージです。

30行目から33行目

ワークシート(Sort_test2)にarrのデータを入力していきます。

A列には商品名をB列には、販売価格をすべて書き出します。

38行目から50行目

ワークシート(Sort_test2)に書き出した表のB列のデータを降順(販売価格が高いものから)に並べ替えています。

48行目のSetRangeメソッドでは、配列の要素数とワークシートの行数との差分を埋めるために +2 をしています。

55行目から58行目

並べ替えたあとの表を改めて配列arrに取り込んでいます。

並べ替え処理のときと同じく、配列の要素数とワークシートの行数との差分を埋めるためにこちらでは -2 をしています。

配列はたくさんの変数をまとめてあつかいときに便利に使えるものだよ。

配列について

 配列とは変数のかたまりのようなものであり、たくさんの変数をまとめてあつかうことができるものです。
配列の詳しい解説については、以下の記事を参考にしてください。

配列の並べ替え(ソート)をするマクロのVBAコード①の実行結果

VBAでExcelの表を並べ替えた結果の画像3

サンプルマクロの配列には見出しはないので、あくまで並べ替え前後のイメージだよ。

辞書(Dictionaryオブジェクト)に代入したデータをSortオブジェクトで並べ替える

 先ほどの配列に代入されたデータの並べ替えをするVBAコードを紹介しましたが、今度は辞書(Dictionaryオブジェクト)に代入されているデータを並べ替える(ソート)処理をしてみます。

辞書(Dictionaryオブジェクト)のデータを並べ替えるマクロを作成したいときはこちらを参考にしてください。

※辞書(Dictionaryオブジェクト)は連想配列とも呼ばれるVBAのオブジェクトの1つですが、キーとアイテムのペアを格納することでインデックス番号ではなく、文字列などのキーをつかってアイテムを取り出すことができるものです。

配列の並べ替え(ソート)をするマクロのVBAコード②の実行結果

  
Option Explicit

Sub Sort_test6()

'辞書(Dictionaryオブジェクト)の宣言
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")

'並べ替え(ソート)後のデータを代入用にもDictionaryオブジェクトを宣言
Dim after_Dic As Object
Set after_Dic = CreateObject("Scripting.Dictionary")

'以下の5つのキーとアイテムを並べ替え前の辞書(Dic)に代入する。
Dic.Add "いちご", 150
Dic.Add "ランニングシューズ", 12000
Dic.Add "ボディソープ", 350
Dic.Add "ジーンズ", 5000
Dic.Add "テレビ", 70000

'======================
'辞書(Dic)をワークシートに転記する
'======================
'貼り付ける行を指定するための変数
Dim row As Integer

'繰り返し処理(For Each文)用の変数
Dim key As Variant

'見出しがあるので行の変数rowに"2"を指定
row = 2

With ThisWorkbook.Worksheets("Sort_test2")
'Dicの要素分(5回)を繰り返す。
    For Each key In Dic
        .Cells(row, 1).Value = key
        .Cells(row, 2).Value = Dic.item(key)
        row = row + 1
    Next key

'======================
'並べ替え(Sort)の処理
'======================
    With .Sort
        '並べ替え(ソート)を条件を初期化
        .SortFields.Clear
        
        'B列(販売価格)が高いものから並べ替え
        .SortFields.Add key:=Range("B1"), _
            Order:=xlDescending
            
        .Header = xlYes

        'Dic要素数(5)とセル範囲の差分のため+1をする
        .SetRange Range("A1:B" & Dic.count + 1)

        .Apply

    End With

'======================
'並べ替えた後の表を辞書(after_Dic)に代入する
'======================
For row = 0 To Dic.count - 1
    after_Dic.Add .Cells(row + 2, 1).Value, .Cells(row + 2, 2).Value
Next row

End With

End Sub

06行目と07行目

初期状態の表を代入するための辞書オブジェクトをDicという名前で宣言しています。

10行目と11行目

並べ替え後の表を代入するための辞書オブジェクトをafter_Dicという名前で宣言しています。

34行目から38行目

ワークシート(Sort_test2)にDicのデータを入力していきます。

43行目から58行目

ワークシート(Sort_test2)に書き出した表のB列のデータを降順(販売価格が高いものから)に並べ替えています。

54行目のSetRangeメソッドでは、辞書の要素数とワークシートの行数との差分を埋めるために +1 をしています。

63行目から65行目

並べ替えたあとの表を改めて辞書after_Dicに取り込んでいます。

並べ替え処理のときと同じく、辞書の要素数とワークシートの行数との差分を埋めるためにこちらでは +2 をしています。

辞書オブジェクトについて

 辞書(Dictionaryオブジェクト)はキーとアイテムと呼ばれるデータをセットにして管理ができるものです。

検索や集計など便利な辞書(Dictionaryオブジェクト)についてもっと詳しく知りたい人は以下のリンクをクリックしてください。

配列の並べ替え(ソート)をするマクロのVBAコード②の実行結果

VBAでExcelの表を並べ替えた結果の画像3

実行結果は配列を並べ替えたマクロのときと同じだよ。

ExcelVBAで並べ替え(ソート)まとめ

 データの並べ替えはデータをあつかう上でとても重要な機能です。

こちらの記事では、データの並べ替えができるエクセルの機能の使いかたと、並べ替えをするマクロの作り方について紹介しました。

さいごに、これまでお伝えした内容をまとめておきますので、あなたの環境にあった部分を参考にして作業や業務にお役立てください。

  • Excelのデータやセルを並べ替え(ソート)をする方法
    1. Excelの並べ替え機能をつかう
    2. ExcelVBAでSortメソッドや、Sortオブジェクトをつかったマクロで実行する
  • SortオブジェクトはExcel2007以前では使用できない
  • Sortメソッドは並べ替えの条件指定は3個まで指定可能
  • Sortオブジェクトは並べ替えの条件指定は64個まで指定可能
  • 配列や辞書の要素の並べ替え(ソート)をするときは1度セルに書き出すと比較的カンタンにできる

並べ替えができるとデータの管理がしやすくなるね。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました