【VBA関係】VBAでExcelのデータを並べ替える(ソートを適用する)|ポテの学習メモ #009
アフィリエイト広告を利用しています。

次のテーブルを操作する。

「販売金額」の列を降順に並べ替える。コードと、その実行結果は次の通り。なお、テーブルのインデックスは1(ListObject(1)
)であることが前提。
Sub SortBySalesAmount()
' 変数宣言
Dim ws As Worksheet
Dim tbl As ListObject
Dim sort_col_idx As Integer
' ワークシートを取得
Set ws = ThisWorkbook.Worksheets(1)
' テーブル(ListObject)を取得
Set tbl = ws.ListObjects(1)
' ソート対象列(販売金額列)のインデックスを取得
sort_col_idx = tbl.ListColumns("販売金額").Index
' 販売金額列を基準に降順でソートを適用
With tbl.Sort
.SortFields.Clear
.SortFields.Add Key:=tbl.ListColumns(sort_col_idx).Range, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With
End Sub

意図通りに並べ替えが適用された。
並べ替え処理を行っている部分はここ↓
' 販売金額列を基準に降順でソートを適用
With tbl.Sort
.SortFields.Clear
.SortFields.Add Key:=tbl.ListColumns(sort_col_idx).Range, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With
処理の手順は次のようになっている。
SortFields.Clear
既存のソート条件をクリア(初期化)。SortFields.Add
ソート対象の列を指定し、降順で並び替える。Key
:ソート対象の列(販売金額列)SortOn
:値に基づいてソート(xlSortOnValues
)Order
:降順(xlDescending
)DataOption
:通常のデータとして扱う(xlSortNormal
)
Header
最初の行がヘッダーの場合にはxlYes
を指定Apply
設定したソートを適用。これがないと、表が更新されない(並べ替えが実行されない)。
.SortFields.Add
の引数は下表の通り。
引数 | 必須/省略可(規定値) | 説明 | 例 |
---|---|---|---|
Key | 必須 | ソート範囲(Range ) | Key:=Range("B2:B100") |
SortOn | 省略可(xlSortOnValues ) | ソート基準(値・色・アイコンなど) | SortOn:=xlSortOnValues |
Order | 省略可(xlAscending ) | 並び順(昇順・降順) | Order:=xlDescending |
CustomOrder | 省略可(通常の昇順・降順が適用) | カスタムソートの順序を指定 | CustomOrder:="日,月,火,水,木,金,土" |
DataOption | 省略可(xlSortNormal ) | 数値・テキストの区別 | DataOption:=xlSortNormal |
SortOn
の定数は下表の通り。
定数 | 説明 |
---|---|
xlSortOnValues | 値に基づいてソート(規定値) |
xlSortOnCellColor | セルの背景色に基づいてソート |
xlSortOnFontColor | 文字色に基づいてソート |
xlSortOnIcon | アイコンセットに基づいてソート |
Order
の定数は下表の通り。
定数 | 説明 |
---|---|
xlAscending | 昇順(小さいものから大きいものへ) |
xlDescending | 降順(大きいものから小さいものへ) |
DataOption
の定数は下表の通り。
値 | 説明 |
---|---|
xlSortNormal | 文字列と数値を別々に並べ替え |
xlSortTextAsNumbers | 数値として解釈可能なテキスト(例: "10" , "100" , "2" )を数値として扱い、数値としてソートする。 |
関連リンク
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)