シートを並べ替えるには

シートを並べ替えるにはシートのMoveメソッドを利用します。元のシート名の一覧を昇順や降順で並べて、その順番にMoveメソッドで配置しなおす手順になります。

シートのMoveメソッドの詳細については「VBAでシートの移動を行う」をご参照ください。

シート名の昇順や降順を行う方法にはいくつかありますが、ここではVBAだけで完結する配列のソートを使った方法を紹介します。

処理概要は以下になります。

  1. 全シートの名前を配列に格納する。
  2. 配列を昇順または降順に並べなおす。
  3. 配列の順序に沿ってMoveメソッドでシートの順番を並べなおす。

ソート処理はバブルソートで実装しています。

ソース構成

以下に5つの関数があります。

No 関数名 概要
1 bubbleSort バブルソート(昇順)
2 bubbleSortDsc バブルソート(降順)
3 RearrangeSheets 配列の順にシートを並べなおす
4 SheetAsc シート整列(昇順)
5 SheetDsc シート整列(降順)

1、2、3番目の関数は4、5番目から呼び出される関数で単独では動作しません。

4番目のSheetAsc関数を実行するとシートが昇順に、5番目のSheetDsc関数を実行すると降順に整列します。

3番目のRearrangeSheetsは昇順と降順で共用していますが、他の関数は昇順用と降順用に分けています。

昇順と降順の関数のそれぞれ黄色の部分が相違点です。必要であれば昇順と降順の関数は引数で共通化してください。ここではあえて共通化していません。

ちょっとした注意点ですが、90行目と111行目のループ処理ではSheetsコレクションを利用しています。ほとんどの場合はWorksheetsコレクションでも問題ありませんが、グラフシートやダイアログシートを利用している場合はWorksheetsコレクションには含まれませんのでその考慮が必要です。

 

使い方

元のシートの並びがこのようになっているとします。
Sheet5、2、1、4、3、7、6です。

その場合に昇順用のSheetAsc関数を実行すると以下に整列します。
Sheet1、2、3、4、5、6、7

また、降順用のSheetDsc関数を実行すると以下に整列します。
Sheet、7、6、5、4、3、2、1

また、シートが1つしか無い場合もエラーにならず正しく動作します。