Excel のソートは,多機能でありとても優秀です.
それをVBAで実現するには?・・・難しそうですねぇ.
まぁ,取り敢えずやってみましょう.

このデータを昇順にソートします

私,残念ながら,Excel に関する書籍も VBA に関する書籍も全く持っておりません.
そこで,マクロの記録を使うことします.

当然,簡単にできます.
Excel 様にこのようなソートをさせるのは気が引けますが・・・

肝心なことは,この操作によりどのようなマクロが生成されたかです.

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1:A1") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:J1")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

アラ~!どんでもない(と私には思える)コードが書かれています.
しかし,よ~く見ると何となく想像ができる部分がありますね.
例えば,Add に続く

Key:=Range("A1:A1")

これは,ソートのためのキーを指定しているようです.
この例では一行のデータを昇順に並べているだけですから,これ以外の指定はできませんが.
次に

Order:=xlAscending

明らかに,昇順でソートすることを示していると考えられます.
この部分を

Order:=xlDescending

と書き換えれば,降順に並べることができるはずです(実際,確認しました).

.SetRange Range("A1:J1")

ソートの範囲を示すものと考えられます.

.Orientation = xlLeftToRight

行方向にデータを並べることを示しているようです.

.Apply

これは,実行するでしょうね.

それ以外は,おまじないということにしておきましょう.

ところで,Excel と言えば,データベースのように行をレコードとし,列を項目としてテーブルを作成するのが通常の使い方です.
ということは,ソートも横方向ではなく,縦方向が圧倒的に多いと考えられます.
そこで,A1 : A10 にデータを並べて,それをソートするという使い方ができなければなりません.
これもマクロを記録してみました.

Sub Macro2()
'
' Macro2 Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1:A1") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:A10")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

うん,予想通りのマクロが生成されています.

ここまで,ソートの基本の基本部分を確認したに過ぎませんが,ここまで分かれば多少複雑な表であっても,自動でソートするマクロを作成することができそうです.
もっとも,最初の部分を記憶しようという気にはなりませんが f^^;
よくあるおまじないということにして,VBA のソート,今日のところはここまでといたしましょう.

ところで,Excel 様のソートアルゴリズムは,バブルソートだそうです.

Last modified: Sunday, 20 August 2023, 5:38 PM