📋
SortSheetsByName
シート管理シートを名前順に並べ替える
ブック内のワークシートを名前順に自動並べ替えるVBAマクロです。バブルソートまたはその他のソートアルゴリズムを使ってシートのインデックス順序を変更します。日本語・英語・数値が混在するシート名にも対応でき、昇順・降順の切り替えも可能です。多数のシートを手動で並べ替える手間を省き、整理されたブック構造を維持するのに役立ちます。内部ではシートのIndexプロパティを比較しながらMoveメソッドで入れ替えるバブルソートのロジックが一般的で、StrComp関数の比較モードを切り替えることで大文字小文字や全角半角の違いも吸収できます。MoveSheetが1枚単位の移動であるのに対し、本マクロはブック全体を対象にした一括整列であり、定期メンテナンスの仕上げ処理として位置付けられます。手作業でのドラッグ並べ替えでは現実的でない枚数でも一瞬で整列できます。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとシートがアルファベット順に並べ替えられる
🎯 活用シーン
- ✓バラバラに追加された月別シートをアルファベット順・日付順に整列
- ✓複数担当者が追加したシートを定期的に自動ソートして管理
- ✓案件コードを付けたシートを番号順に並べ替えて一覧性を向上
- ✓複数人が無秩序にシートを追加していったブックを、定期的に整った順序へ自動整理したいとき
- ✓案件番号順にシートを並べ替えて、一覧性の高い管理ブックを維持したいとき
💡 実装のヒント
- ▸Worksheet.Moveでインデックスベースのソートができます
- ▸StrComp関数のvbTextCompareで大文字小文字を無視した比較ができます
- ▸数値を含むシート名は文字列ソートより数値ソートが自然な並びになります
- ▸数値を含むシート名(「第1回」「第10回」など)は文字列ソートだと桁数の影響で意図しない順序になるため、数値部分を抽出した独自ソートロジックが必要です。
- ▸ソート対象から特定のシート(表紙・目次など)を除外したい場合は、シート名のパターンマッチで除外リストを作成してください。
💻 VBAコード
' SortSheetsByName
' -----------------
' Macro Name: SortSheetsByName
' Description: シートを名前順に並べ替える
' Parameters: なし
' Returns: なし
' Usage: 実行するとシートがアルファベット順に並べ替えられる
' -----------------
Sub SortSheetsByName()
Dim ws As Worksheet
Dim sheetNames() As String
Dim i As Long
Dim j As Long
Dim temp As String
Dim sheetCount As Long
On Error GoTo ErrorHandler
sheetCount = Worksheets.Count
If sheetCount <= 1 Then
MsgBox "シートが1つしかないため並べ替えの必要はありません。", vbInformation
Exit Sub
End If
ReDim sheetNames(1 To sheetCount)
For i = 1 To sheetCount
sheetNames(i) = Worksheets(i).Name
Next i
For i = 1 To sheetCount - 1
For j = i + 1 To sheetCount
If StrComp(sheetNames(i), sheetNames(j), vbTextCompare) > 0 Then
temp = sheetNames(i)
sheetNames(i) = sheetNames(j)
sheetNames(j) = temp
End If
Next j
Next i
For i = 1 To sheetCount
Worksheets(sheetNames(i)).Move Before:=Worksheets(i)
Next i
MsgBox sheetCount & "枚のシートを名前順に並べ替えました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub