Excel VBA

[ExcelVBA] エクセルデータを自由自在に並び替える方法[Sort]

2020年3月20日

 

本記事はエクセル2019で動作確認を行っています。

 

困ってます
ExcelVBAを使用してセルのデータを並び替えたいです。

具体的なコードを教えて。

 

 

本記事はこのような疑問にお答えします。

 

 

サイト運営者であるロンピー(@ronpeee0809)はExcelVBAを使用して10年以上会社部内の業務改善を行っています。

これからVBAを学ぶ方がスムーズに学習を進められる手助けをしていきます。

ロンピー

 

 

エクセルではデータの並び替え(ソート)を自由に行うことが可能です。

セルの値はもちろん、セルの色・フォントの色・条件付き書式でも並び替えを行うことができます。

エクセルでは「データ」タブ>「並び替え」で並び替えが行えます。

 

 

Sortメソッドの使い方(Excel2002/2003 )

 

(式)

オブジェクト.Sort(Key1,Order1, Key2,Order2, Key3,Order3,Header,OderCustom,MatchCase,Orientation,SortMethod,DataOption1, DataOption2, DataOption3)

 

ポイント

引数と定数は「:=(コロンとイコール)」でつなぎます。

 

 

内容 引数 定数
列のセルを指定 Key1~3 セル範囲
指定列を昇順か降順か選択 Order1~3
昇順 xlAscending
降順 xlDescending
先頭行をタイトル行に指定するか Header
自動設定 xlGuess
指定する xlNo
指定しない xlYes
並び替えの順序を指定 OrderCustom 数値を指定
大文字と小文字を分けるか判断 MatchCase
分ける True
分けない False
並び替えの方向を指定 Orientation
上から下 xlSortColumns
左から右 xlSortRows
ふりがなを使用するか SortMethod
使用する xlPinYin
使用しない xlStroke
文字列と数値を分けるか DataOption1~3
分ける xlSortNormal
分けない xlSortTextAsNumbers

 

 

Sortオブジェクトの使い方(Excel2007以降)

 

Sortオブジェクトを取得するには、Sortプロパティを使用します。

Sortオブジェクトの様々なメソッドをやプロパティを使用することで、希望の並び替えを行えます。

 

(式)

オブジェクト.Sort

 

ポイント

プロパティと定数は「:=(コロンとイコール)」でつなぎます。

 

代表的なメソッドとプロパティは

 

<メソッド>

内容 メソッド
並べ替え実行 Apply
並べ替えを行うセル範囲を指定 SetRange

 

<プロパティ>

 

内容 プロパティ 定数
先頭行をタイトル行に指定するか Header
自動設定 xlGuess
指定する xlNo
指定しない xlYes
大文字と小文字を分けるか判断 MatchCase
分ける True
分けない False
並び替えの方向を指定 Orientation
上から下 xlSortColumns
左から右 xlSortRows
ふりがなを使用するか SortMethod
使用する xlPinYin
使用しない xlStroke

 

 

SortFieldsコレクションのAddメソッドを使用することで並び替えも行えます。

 

(式)

オブジェクト.Add Key,SortOn,Order,CustomOrder,DataOption

 

ポイント

引数と詳細は「:=(コロンとイコール)」でつなぎます。

 

内容 引数 詳細
並び替えの列のセル範囲を指定 Key
並び替えのキーを指定 SortOn
内容 設定値
SortOnCellValues
セルの色 SortOnCellColor
文字の色 SortOnCellFont
アイコン SortOnCellIcon
指定列を昇順か降順か選択 Order
内容 設定値
昇順 xlAscending
降順 xlDescending
ユーザー設定リストを使用する場合は、リストを指定 CustomOrder
並び替えの方法を指定 DataOption
内容 設定値
文字列と数値を分ける xlSortNormal
文字列と数値を分けない xlSortTextAsNumbers

 

練習問題

 

従業員名簿の表を入社日順に並び替えてみましょう。

 

 

Sub 並び替え()

    With ActiveSheet.Sort
        .SortFields.Clear ’すべてクリア
        .SortFields.Add Key:=Range("D3"), _
            SortOn:=xlSortOnValues, Order:=xlAscending ’D3列を昇順
        .SetRange Range("A3").CurrentRegion ’表を選択
        .Header = xlYes ’先頭行を見出しに
        .Apply ’実行
    End With

End Sub

 

(実行結果)

 

まとめ

 

並び替えはオブジェクトやメソッドやプロパティの関係性で少し混乱するかもしれません。

基本的なつくりは

  1. SortFieldsオブジェクトをクリアする。
  2. 並べ替えをしたい範囲で昇順・降順を指定
  3. 複数設定したい場合は、2を繰り返す。
  4. 並び替えの範囲を設定する。
  5. 実行する。

となります。

 

最後まで目を通していただきありがとうございます。

-Excel VBA
-

Copyright© Ronpeee blog , 2023 All Rights Reserved.