📊 Excel VBA Top100
📋

RenameSheet

シート管理

シートの名前を変更する

ワークシートの名前をVBAで変更するマクロです。Worksheet.Nameプロパティに新しい名前を代入するだけで即座にリネームできます。日付・番号・テキスト置換などを組み合わせた動的な名前生成や、一定規則で複数シートを一括リネームする処理に活用します。重複名や使用不可文字(/、\、?、*など)のチェックを組み込むことで安全なリネームが実現します。内部ではWorksheet.Nameプロパティに新しい文字列を直接代入するだけの処理ですが、Excelのシート名には31文字制限や使用不可文字(\ / ? * [ ] :)があるため、代入前にバリデーション処理を挟むと安全です。AddNewSheetで作成した直後に本マクロで意味のある名前を付ける流れがよく使われる組み合わせです。タブをダブルクリックして手入力する操作を、まとめて自動化できる点が実務上のメリットです。

RenameSheet デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると現在のシート名と新しいシート名を入力するダイアログが表示される

🎯 活用シーン

  • ✓月次処理で「Sheet1」から「2025年1月」形式に自動リネーム
  • ✓一括インポートしたデータシートをセル値に基づいて命名
  • ✓プロジェクトテンプレートのシート名を案件名で一括置換
  • ✓自動生成した「Sheet1」「Sheet2」のような無機質な名前を、案件名や日付ベースの分かりやすい名前に一括変換したいとき
  • ✓命名規則が変更になった際に、既存の全シート名を新ルールへ一括リネームしたいとき

💡 実装のヒント

  • ▸Sheets名に使えない文字: \ / ? * [ ] : を事前チェックします
  • ▸31文字以内というシート名の制限に注意が必要です
  • ▸既存シート名との重複チェックはSheetsコレクションをループして確認します
  • ▸重複するシート名を自動回避したい場合は、既存名をチェックして末尾に連番を付与するロジックを追加してください。
  • ▸日本語のシート名は文字数制限に達しやすいため、略称やコードを併用した命名ルールを検討することをお勧めします。

💻 VBAコード

' RenameSheet
' -----------------
' Macro Name: RenameSheet
' Description: シートの名前を変更する
' Parameters: なし
' Returns: なし
' Usage: 実行すると現在のシート名と新しいシート名を入力するダイアログが表示される
' -----------------

Sub RenameSheet()
    Dim ws As Worksheet
    Dim currentName As String
    Dim newName As String
    Dim i As Long

    On Error GoTo ErrorHandler

    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = InputBox("名前を変更するシート名を入力:", "シート名変更", "Sheet1") Then
            Set ws = Worksheets(i)
            Exit For
        End If
    Next i

    If ws Is Nothing Then
        MsgBox "指定されたシートが見つかりません。", vbExclamation
        Exit Sub
    End If

    currentName = ws.Name
    newName = InputBox("新しいシート名を入力:", "シート名変更", currentName)

    If newName = "" Then
        MsgBox "キャンセルされました。", vbInformation
        Exit Sub
    End If

    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = newName And Worksheets(i).Name <> currentName Then
            MsgBox "「" & newName & "」は既に存在します。", vbExclamation
            Exit Sub
        End If
    Next i

    ws.Name = newName
    MsgBox "「" & currentName & "」を「" & newName & "」に変更しました。", vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub