Excelを使っていると、いつの間にか大量のシートが・・・。なんてことありませんか?
え?ちゃんと管理しているから大丈夫?
そ、そうですか。
じゃ、じゃあ、他の人が作って、しかもそれが脈々と受け継がれ来て、コピーされたシートがいっぱいになっている。
なんてことはないでしょうか?
・・・それなら、あるかもしれない?
ですよね!
シートがたくさんあり過ぎて、扱いづらいExcel。
そのシートを簡単に並び替えたい。
そんなときに活躍するVBAコードの紹介です。
コード
'シートの一覧を書き出す Sub WriteSheet() Dim sh As Worksheet Dim shWriteTo As Worksheet: Set shWriteTo = Sheet1 shWriteTo.Cells.ClearContents 'シートをまっさらにする Dim i As Long: i = 2 '1行目は項目名 shWriteTo.Cells(1, 1).Value = "シート名" For Each sh In Worksheets shWriteTo.Cells(i, 1).Value = sh.Name i = i + 1 Next sh End Sub
'Sheet1のA列に書かれたシート名の '順番にシートを並び替える Sub sortSheet() Dim sh As Worksheet 'ソートするシート名が書かれたシート Dim shWriteTo As Worksheet: Set shWriteTo = Sheet1 '最終行の取得 Dim lastRow As Long: lastRow = shWriteTo.Cells(Rows.Count, 1).End(xlUp).Row Dim i As Long Dim aftershName As String Dim beforeShName As String For i = 2 To lastRow - 1 beforeShName = shWriteTo.Cells(i, 1).Value aftershName = shWriteTo.Cells(i + 1, 1).Value 'シートを入れ替える Worksheets(aftershName).Move after:=Worksheets(beforeShName) Next i End Sub
どんな動きをするコードか
例えばシートが5枚あるとします。
まずWriteSheetサブプロシージャを実行して、シート名をSheet1に書き出します。
手動(ここ重要)で任意の順に適当に並び替えて・・・
ここでフィルタを使えば昇順、降順もできます。
どのような順番に並び替えたいかはそのときの状況によりますので、ここは手動としております。
並び替えが完了した後で、sortSheetサブプロシージャを実行すれば・・・
シートが並び替えられました。
実用性は?
あんまりないかも・・・?
そもそもシートを大量に作ってしまうと可読性も悪くなりますし、ブックも重くなってしまいます。
逆にあんまりシート数がないと、このコードを実行するより手動で並び替えてしまった方が早いですね。
なんとも言えないところですが。
どちらかというと、シートの並び替えのところは、アルゴリズム的な感じで頭の体操になりますね。
そっちの実用性はあります。
(ちょっと何言っているかわからないですね)
終わりに
ついついブックに大量のシートを作ってしまった際や、他人が作って脈々と受け継がれてきてシートが大量になってしまったExcelを整理するときに使えそうなコードの紹介でした。
実用性的にはどうかと思いますが、ここに記しておけば、まだ見ぬどなたかの役に立つかもしれませんので記しておこうと思います。
ここまでお読みいただき、ありがとうございました。