並べ替え

並べ替え(ソート)もマクロから操作できます。内容としては「データ」メニューからの操作のものと変わりません。

ワークシート上の並べ替えは、ツールバーから操作できるので、自動記録でもコードが取得できます。簡単なサンプルを用意して見ました。
サンプルはAD列の内容を並べ替えるものですが、AD列を選択すればその列で即座に並べ替えられます。
並べ替えサンプル
(画像をクリックすると、このサンプルがダウンロードできます)
並べ替えの状態を確認して下さい。

実際のコードは、以下のようにSortメソッド1行で並べ替えられます。
このマクロは、ワークシート上でセル内容が変わったことのイベントで動作させます。このため、「Worksheet_Change」のイベント処理を使います。


'***************************************************************************************************
'   並べ替えのサンプル                                              Sheet1(Class)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/07/16(1.00)新規作成
'12/01/21(1.01)修正
'20/02/22(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ ワークシートイベント ■■■
'***************************************************************************************************
'* 処理名 :Worksheet_Change
'* 機能  :セル値変更イベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = Target(Range)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月16日
'* 作成者 :井上 治
'* 更新日 :2020年02月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '-----------------------------------------------------------------------------------------------
    Dim lngCol As Long                                              ' カラムINDEX
    lngCol = Target.Column
    ' A~D列以外は無視する
    If lngCol > 4 Then Exit Sub
    ' 一旦イベントを停止
    Application.EnableEvents = False
    ' A~D列を選択したセルのカラムで並べ替える(昇順)
    Columns("$A:$D").Sort Key1:=Cells(1, lngCol), _
                          Order1:=xlAscending, _
                          Header:=xlNo, _
                          Orientation:=xlTopToBottom
    ' イベントを再開
    Application.EnableEvents = True
    ' 本ブックを保存済みにする
    ThisWorkbook.Saved = True
End Sub

'----------------------------------------<< End of Source >>----------------------------------------
同時に行なえる並べ替えの階層はExcel側の制限で3階層までです。2階層目以降はこのサンプル同様に「Key2」「Key3」と並べて指定できます。「Order1」はあえて指定しましたが、「昇順」がデフォルトなので、省略しても構いません。
このサンプルでは、「Columnsオブジェクト」で並べ替えているので、1行目から全てが並べ替えの対象となります。見出し行を並べ替えの対象から外すには、「Rangeオブジェクト」で範囲を制限するか、引数に「Header:=xlYes」を追加します。「Header:=xlYes」では指定範囲の1行目のみ並べ替えの対象から除外されます。
このサンプルでは、「行()」方向を対象に並べ替えていますが、「列()」方向を対象とする場合は、「Orientation:=xlLeftToRight」を追加します。
メソッドの「引数」の記述方法は、VBA基本」の中で説明しています。
ワークシート上での並べ替えの他、マクロ上で配列変数を使って並べ換えたり、その処理時間を判定するサンプルを「ワークシートのSortメソッドを使わずに並べ替えを行なう。」に用意しました。