VBA100本ノック 15本目:シートの並べ替え
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
並べ替えか・・・。並べ替えと言えば、ソート。ソートと言えば、
たまに「バブルソート」や「クイックソート」などを耳にするが、
ちゃんと中身を見たことが無かった。
ということで、同サイトのこちらで勉強してみた。
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
試してみたところ、どちらも無事ソートすることができた。
ただし、対象となるシート以外が存在した場合、今回のマクロは
上手く動かない。なぜなら、色々なことを決め打ちしてるから。
ということで汎用性を持たせたい場合、さらなる作りこみが必要
なようです。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。