【Excel VBA】全ワークシートを名前順(昇順)に並べ替える方法

Excelで多数のシートを扱っていると、タブの順番がバラバラになり、目的のシートを探すのが大変になることがあります。手作業でドラッグして並べ替えるのは、シート数が多いと非常に面倒な作業です。

VBAを使えば、すべてのワークシートを名前順(昇順)で自動的に並べ替えることが可能です。この記事では、基本的な並べ替えアルゴリズム(バブルソート)を使って、シートをきれいに整列させるコードを解説します。


目次

並べ替えの処理フロー

今回のマクロは、以下の3つのステップで動作します。

  1. シート名の一覧を取得: まず、現在のブックに存在するすべてのシート名を、配列(VBAの変数の一種)に格納します。
  2. 配列を名前順にソート: 次に、配列に格納したシート名を、プログラム内部で名前順(昇順)に並べ替えます。
  3. シートを物理的に移動: 最後に、ソート済みの配列の順番通りに、実際のシートを.Moveメソッドを使って一つずつ移動させていきます。

完成したVBAコード

以下が、シートを名前順に並べ替えるVBAコードです。

Sub SortAllWorksheetsByName()

    ' 変数を宣言します
    Dim sheetNames() As String
    Dim sheetCount As Integer
    Dim i As Integer
    Dim j As Integer
    Dim tempName As String
    
    '--- 1. すべてのシート名を取得して配列に格納 ---
    sheetCount = ThisWorkbook.Worksheets.Count
    ReDim sheetNames(1 To sheetCount)
    
    For i = 1 To sheetCount
        sheetNames(i) = ThisWorkbook.Worksheets(i).Name
    Next i
    
    '--- 2. 配列内のシート名をバブルソートで並べ替え ---
    For i = 1 To sheetCount - 1
        For j = i + 1 To sheetCount
            ' 前後の名前を比較し、i番目の方が大きければ入れ替え
            If sheetNames(i) > sheetNames(j) Then
                tempName = sheetNames(j)
                sheetNames(j) = sheetNames(i)
                sheetNames(i) = tempName
            End If
        Next j
    Next i
    
    '--- 3. ソートされた配列の順番通りにシートを移動 ---
    Application.ScreenUpdating = False ' 画面のちらつきを抑制
    
    For i = 1 To sheetCount
        ThisWorkbook.Worksheets(sheetNames(i)).Move After:=ThisWorkbook.Worksheets(sheetCount)
    Next i
    
    Application.ScreenUpdating = True
    
    MsgBox "すべてのシートを名前順に並べ替えました。"

End Sub

コードのポイント解説

① シート名の一覧を取得

最初のForループで、ブックに存在するすべてのワークシートの名前を読み取り、sheetNamesという配列変数に順番に格納しています。

② 配列を名前順にソート(バブルソート)

For i = 1 To sheetCount - 1
    For j = i + 1 To sheetCount
        If sheetNames(i) > sheetNames(j) Then
            ' ... 入れ替え処理 ...
        End If
    Next j
Next i

ここは、バブルソートと呼ばれる古典的なアルゴリズムを使い、配列内の文字列を昇順に並べ替えている部分です。二重のループで配列の要素を総当たりで比較し、順番が逆であれば一時変数tempNameを使って値を入れ替えています。

③ ソートされた配列の順番通りにシートを移動

For i = 1 To sheetCount
    ThisWorkbook.Worksheets(sheetNames(i)).Move After:=ThisWorkbook.Worksheets(sheetCount)
Next i

並べ替えロジックの肝となる部分です。ソート済みのsheetNames配列を頭から順番に処理し、各シートを常にブックの一番右端(末尾)に移動させています。

例えば、ソート後の配列が("A", "B", "C")だった場合、

  1. まず"A"シートが末尾に移動します。シートの並びは (B, C, A) になります。
  2. 次に"B"シートが末尾に移動します。シートの並びは (C, A, B) になります。
  3. 最後に"C"シートが末尾に移動します。シートの並びは (A, B, C) となり、結果的にソートされた順番になります。

また、シート移動の際に画面がちらつくのを防ぐため、処理の前後をApplication.ScreenUpdating = False / Trueで囲んでいます。


【応用】降順(逆順)に並べ替えるには?

もしシートを名前の降順(Z→Aの順)に並べ替えたい場合は、バブルソート部分の比較演算子を > から < に変更するだけです。 If sheetNames(i) < sheetNames(j) Then


まとめ

ワークシートの自動並べ替えは、少し複雑に見えますが、

  1. 配列に名前を読み込む
  2. ソートアルゴリズムで配列を並べ替える
  3. 並べ替えた配列の順に**.Move**でシートを移動させる という3つのステップに分解して考えることで、実現できます。ブック内のシートが増えてきた際に、このマクロを実行すれば一瞬で整理することができ、大変便利です。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次