適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

【Excel VBA】シートを並び替える

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枚あるとします。

f:id:shinmai_papa:20210310002257p:plain

まずWriteSheetサブプロシージャを実行して、シート名をSheet1に書き出します。

f:id:shinmai_papa:20210310002253p:plain

手動(ここ重要)で任意の順に適当に並び替えて・・・

ここでフィルタを使えば昇順、降順もできます。

どのような順番に並び替えたいかはそのときの状況によりますので、ここは手動としております。

f:id:shinmai_papa:20210310002247p:plain

並び替えが完了した後で、sortSheetサブプロシージャを実行すれば・・・

シートが並び替えられました。

f:id:shinmai_papa:20210310002250p:plain

実用性は?

あんまりないかも・・・?

そもそもシートを大量に作ってしまうと可読性も悪くなりますし、ブックも重くなってしまいます。

逆にあんまりシート数がないと、このコードを実行するより手動で並び替えてしまった方が早いですね。

なんとも言えないところですが。

どちらかというと、シートの並び替えのところは、アルゴリズム的な感じで頭の体操になりますね。

そっちの実用性はあります。

(ちょっと何言っているかわからないですね)

終わりに

ついついブックに大量のシートを作ってしまった際や、他人が作って脈々と受け継がれてきてシートが大量になってしまったExcelを整理するときに使えそうなコードの紹介でした。

実用性的にはどうかと思いますが、ここに記しておけば、まだ見ぬどなたかの役に立つかもしれませんので記しておこうと思います。

ここまでお読みいただき、ありがとうございました。

関連がありそうな記事

www.tekizai.net

www.tekizai.net

www.tekizai.net