ブログBlog
ExcelVBAで並び替え
投稿日:2025年02月26日 テクノロジー
こんにちは。松宮です。
本日は、ExcelVBAを使用してExcelの表の列の並び替えを行いたいと思います。
Excelで日々のタイピング練習の記録を表で残しています。

今回はVBAでExcelシート上のボタンを押すと「入力文字数」の列を降順(最大値が上位に表示)に並び替える、ちょっとしたツールを作成したいと思います。
過去の常駐先でも手作業で最大の金額を確認するため金額の列を降順に並び替えて作業をすることがありました。
ExcelVBAの勉強にしばしお付き合いいただければと思います。マクロ名を「並び替え」とします。
表と同じワークシート上にボタンを配置します。「開発タブ」から「挿入」を押し「フォームコントロール」から「ボタン」を選択します。
配置したい場所でドラッグし、ダイアログが表示されたらボタンに登録するマクロを選択します。
今回はマクロ「並び替え」を選択します。ボタンの編集は右クリックから行えます。今回のボタン名は「入力文字数並び替え」とします。
下記にコードを記載しました。まずは変数の宣言を行ないます。
数値型、テキスト型、ワークシート型、などデータ型を指定できます。
今回は自動化させたいシートを指定するための入れ物を作成します。
※以下のコードで「’」からはじまる文章はコメントでコードに影響のない記載です。
Sub 並び替え()
Dim ws As Worksheet ’ワークシートを指定する 「タイピング練習履歴表」シート
Dim rng As Range ’自動化を適応させるセル範囲(範囲指定) A2~C30
’使用する変数はオブジェクト変数なのでSetが必要です。
’Set 変数名 = セットするオブジェクト となります。
Set ws = ThisWorkbook.Sheets("タイピング")
Set rng = ws.Range("A2:C30")
'セルA2~C30の範囲でB2(入力文字数)の列をキーに降順に並び替える。
’入力文字数が多い順に並び変える。
'rng.Sort key1:=ws.Range("B2"), Order1:=xlAscending, Header:=xlYes '昇順
rng.Sort key1:=ws.Range("B2"), Order1:=xlDescending, Header:=xlYes '降順
’オブジェクト変数を使用し終わったら解放します(解放しないままだと余計に多くのメモリーを使用していまいます。)
’Set オブジェクト変数 = Nothing
Set ws = Nothing
Set rng = Nothing
End Sub

興味のある方は参考にしてみて下さい。