エクセルにはデータを並べ替える(ソート)機能があり、数値の小さいものから順番に並べる昇順。逆に大きいものから並べることを降順と言います。
大量のデータが入力された表において、昇順や降順に並べ替えたいときがあります。
例えば、社員の年齢が若い人から並べる、顧客リストで予約が入った日付順に並べ替える、商品リストの在庫数が多いものから並べるなど、データを並べ替えたい場面は多く考えられます。
セルやデータの並べ替えは、分析やランキングをつくるときも便利なので、エクセルで事務作業やデータ管理をしている人はかならずおぼえておきたい機能だと言えます。
この記事では、エクセルのソート機能とVBAでソートするマクロの作りかたを紹介します。
Sort(ソート)は、セルやデータを並べ替えられるとても便利な機能だよ。
エクセルで並べ替え(ソート)機能をつかう方法
エクセルの表でデータの並べ替え(ソート)機能をつかうためには、以下の手順で実施します。
昇順・降順ボタンをつかった並べ替え(ソート)方法
- エクセルのワークシート画面にて並べ替えたい列のセルを選択します。
- [データ]タブを選択します。
- [昇順]ボタン・[降順]ボタンを選択します。
こちらで紹介している並べ替え機能の他、表の並べ替え(ソート)や、条件に当てはまったデータの抽出をしたいときは、Excelのフィルター機能も手軽に使えておすすめです。Excelのフィルター機能の使いかたについては、こちらの記事で詳しく解説していますのであわせてチェックしてみてください。
フィルター機能は、Excelで表を管理する人は使わないと損をする。と言えるほど優秀な機能だよ。
並べ替えボタンをつかった並べ替え(ソート)方法
- エクセルのワークシート画面にて並べ替えたい列のセルを選択します。
- [データ]タブを選択します。
- [並べ替え]ボタンを選択します。
- 並べ替えウィンドウで[先頭行をデータの見出しとして使用する]に✅する
- 並べ替えウィンドウの[列]より並べ替え(ソート)をしたい見出しを選択する
- 並べ替えウィンドウの[順序]より並べ替え(ソート)をする方法を選択する
- 並べ替えウィンドウの[OK]を選択する
ユーザー定義の順番に並べ替え(ソート)をする方法
ユーザー定義で登録した順番に並べ替え(ソート)ができます。
例えば、本のジャンルがデータとして入力されたが列があるとして、辞書 ➡ 小説 ➡ ビジネス書 ➡ 雑誌 と並べ替えをしたい場合など、数字や日付のように序列をもたない値も、ユーザー定義をすることで指定どおりに並べ替え(ソート)ができます。
リストの項目で値を書き込む順序で並べ替え(ソート)方法が指定できます。
リストの項目を書き込む方法
自分の好きな順序で並べ替え(ソート)ができるって便利だよね。
並べ替え(ソート)をするキーを追加して条件をかさねて設定する
並べ替えウィンドウで[レベルの追加]を選択すると、並べ替えの条件を重ねて設定できます。
●具体的な例(ユーザー定義と大きい順の組み合わせ)
列 | 並べ替えのキー | 順序 |
---|---|---|
最優先されるキー | 商品カテゴリ | 食品,日用品,家電,ファッション,スポーツ用品 |
次に優先されるキー | 販売価格 | 大きい順 |
商品カテゴリごとに販売価格が高いものから順番に並べ替えるよ。
エクセル・ワード・パワーポイントのオンライン学習
料金負担が安いのになんど見ても追加費用は不要!
安心の環境でしっかりとスキルをつけたいならPCHack
エクセルVBAで並べ替え(ソート)機能をつかう方法
ここからは、VBAで並べ替え(ソート)の機能をつかう方法を紹介します。
VBAでは『Sortメソッド』と、『Sortオブジェクト』の2つをつかって並べ替え(ソート)ができます。
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)を実行したい場合は、後述のSortオブジェクトをご利用ください。
Sort(ソート)メソッドをつかったサンプルコード
こちらの表で、VBAのサンプルコードをつかって並べ替え(ソート)してみます。
Sub Sort_test() With ThisWorkbook.Worksheets("Sort_test") .Range("A1:H11").Sort key1:=Range("A1"), Order1:=xlDescending, Header:=xlYes End With End Sub
A列(商品ID)を、降順で並べ替えるよ。
表全体をRangeオブジェクトで範囲として、並べ替え(ソート)を実施します。
並べ替え(ソート)の条件は、.Sortのあとの部分で『A列(商品ID)で降順とし、見出しは並べ替えない』といった条件を指定しています。
実行結果は以下のとおりです。
商品IDの大きいものから順に並べ替えたよ。
Sort(ソート)オブジェクトをつかった並べ替え
Sortメソッドだけでなく、Sortオブジェクトを使ってセルやデータを並べ替えることもできます。
Excel2007以前をつかっている場合は、Sortオブジェクトが使えませんので、Sortメソッドで並べ替えを利用してください。
Sort(ソート)オブジェクトとは
Sortオブジェクトはデータをビルドして並べ替え(ソート)ができます。
Sortオブジェクトにはメソッドとプロパティがあり、これらを設定することでデータの並べ替えが実行できます。なお、Sortオブジェクトは並べ替えの条件となるKeyが64個まで指定が可能です。
Sortオブジェクトは、Sortメソッドが進化したものだと言えるね。
Sort(ソート)オブジェクトのメソッド
Sortオブジェクトのメソッドは以下の2つです。
Sortオブジェクトのメソッド
メソッドの種類 | 説明 |
---|---|
Apply | 並べ替えを実行します。 |
SetRange | 並べ替えをする範囲を指定します。 |
Sortオブジェクトのメソッドは”範囲の指定”と”実行”だね。
Sort(ソート)オブジェクトのプロパティ
プロパティの以下のとおり、設定値などはSortメソッドのときと同じです。
Application、Creatorプロパティなども存在しますが、使用する場面があまりないため割愛しています。
Sortオブジェクトのプロパティ
プロパティの種類 | 設定値 | 説明 |
---|---|---|
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メソッドで並べ替えのキーの追加や、順序をパラメーターで指定します。
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を降順にするマクロ
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
Sortメソッドと同じで、商品IDを降順に並べ替えるマクロだよ。
Sortオブジェクトをつかって商品カテゴリを指定の順に並べ替えるマクロ
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
サンプルコード(Sort_test2)からの変更点は、SortFields.AddのパラメーターであるKeyを商品カテゴリ(B列)に変更と、B列の並べ替え順序をCustomOrderで指定しているところです。
Sortオブジェクトで商品カテゴリを指定の順に並べ替えるマクロだよ。
マクロの実行結果(Sort_test3)
商品カテゴリを”食品”、”日用品”、”家電”、”ファッション”、”スポーツ用品”の順で並べ替えたよ。
サンプルコード(Sort_test3)に、発売日を降順で並べ替え(Sort)する条件を追加してみます。
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
サンプルコード(Sort_test3)に、新たにSortFields.Addメソッドで発売日(G列)の条件を追記しました。
マクロの実行結果(Sort_test4)
発売日があたらしいものからの順番に並べ替えたよ。
配列や辞書の要素を並べ替え(ソート)する
配列や辞書(Dictionaryオブジェクト)の要素の並べ替え(ソート)をするマクロを紹介します。
配列内のデータを並べ替える(ソート)方法ですが、配列や辞書内の要素を、直接並べ替える(ソート)する方法と、一度セルに出力したデータを並べ替え(ソート)をする方法の2つがあります。
ここでは、比較的にマクロをつくることが簡単な、『セルに出力する方法』をつかって、配列と辞書の要素の並べ替え(ソート)をするサンプルコードを紹介します。
- 配列・辞書データをつくる
- 配列や辞書データをExcelのワークシートに書き出す
- Sortオブジェクトでワークシートに書き出したデータを並べ替え(ソート)をする
- 並べ替え(ソート)した表を、配列や辞書に代入する
配列や辞書もセルに出力して並べ替えるマクロなら比較的かんたんに作れるよ。
配列に代入したデータをデータをSortオブジェクトで並べ替える
配列に代入されている要素(データ)を並べ替える(ソート)処理をします。
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 '====================== '辞書(Dic)をワークシートに転記する '====================== '繰り返し処理用(カウンタ)の変数を宣言する 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
サンプルコード(Sort_test5)で冒頭につくった配列(arr)の要素を、すべてExcelのワークシートに貼り付けています。貼り付けた配列データをSortオブジェクトを使って並べ替えた後、再度配列(arr)に代入すれば、配列データの並べ替えができます。
配列はたくさんの変数をまとめてあつかいときに便利に使えるものだよ。
\配列についての記事はコチラ/
マクロの実行結果(Sort_test5)
サンプル配列には、見出しはないので、あくまで並べ替えの前と後のイメージだよ。
辞書(Dictionaryオブジェクト)に代入したデータをSortオブジェクトで並べ替える
辞書(Dictionaryオブジェクト)に代入されているデータを並べ替える(ソート)処理をします。
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 .SetRange Range("A1:B" & Dic.count + 1) 'Dic要素数(5)とセル範囲の差分のため+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
サンプルコード(Sort_test6)では、辞書(Dic)に代入したキーとアイテムをワークシートに転記してから、並べ替え(ソート)をしています。並べ替えが完了したものを、辞書(after_Dic)に代入することで実現しています。
辞書(Dictionaryオブジェクト)はキーとアイテムと呼ばれるデータをセットにして管理ができるものです。
検索や集計など便利な辞書(Dictionaryオブジェクト)についてもっと詳しく知りたい人は以下のリンクをクリックしてください。
\辞書(Dictionaryオブジェクト)に関する記事はコチラ/
マクロの実行結果(Sort_test6)
実行結果は配列のときと同じだよ。
ExcelVBAで並べ替え(ソート)まとめ
- Excelのデータやセルを並べ替え(ソート)をする方法
- Excelの並べ替え機能をつかう
- ExcelVBAでSortメソッドや、Sortオブジェクトをつかったマクロで実行する
- SortオブジェクトはExcel2007以前では使用できない
- Sortメソッドはキーの指定は3個まで。Sortオブジェクトは64個まで指定ができる
- 配列や辞書の要素の並べ替え(ソート)をするとき、一度セルに出力すれば比較的カンタンにできる
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント