VBA100本ノック 15本目:シートの並べ替え

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。
f:id:Infoment:20220124233203p:plain

並べ替えか・・・。並べ替えと言えば、ソート。ソートと言えば、
たまに「バブルソート」や「クイックソート」などを耳にするが、
ちゃんと中身を見たことが無かった。

ということで、同サイトのこちらで勉強してみた。
excel-ubara.com

結果がこちら。
まず、バブルソートっぽいバージョン。

Sub VBA_100Knock_015_1()
    ' バブルソートっぽく。
    Dim i As Long
    Dim j As Long
        Application.ScreenUpdating = False
        For i = 12 To 1 Step -1
            For j = 1 To i - 1
                If DateValue(Sheets(j).Name) > DateValue(Sheets(j + 1).Name) Then
                    Sheets(j).Move After:=Sheets(j + 1)
                End If
            Next
        Next
        Application.ScreenUpdating = True
        
        Sheets(1).Select
End Sub

次いで、挿入ソートっぽいバージョン。

Sub VBA_100Knock_015_2()
    ' 挿入ソートっぽく。
    Dim i As Long
    Dim j As Long
    Dim temp As Long
        Application.ScreenUpdating = False
        For i = 2 To 12
            temp = DateValue(Sheets(i).Name)
            For j = i - 1 To 1 Step -1
                If DateValue(Sheets(j).Name) > temp Then
                    Sheets(j).Move After:=Sheets(j + 1)
                Else
                    Exit For
                End If
            Next
        Next
        Application.ScreenUpdating = True
        
        Sheets(1).Select
End Sub

試してみたところ、どちらも無事ソートすることができた。
ただし、対象となるシート以外が存在した場合、今回のマクロは
上手く動かない。なぜなら、色々なことを決め打ちしてるから。

ということで汎用性を持たせたい場合、さらなる作りこみが必要
なようです。

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。