トップ > 汎用コード > アクティブブックのシート名を一括変更

アクティブブックのシート名を一括変更2023.05.24 更新日:2026.04.05

アクティブブックのワークシート名を[基準名]+[(3桁) 連番]に設定するマクロです。
シート名の変更対象となるシートは、見出しに色がついていないシートです。 シート名を変更したくないシート (変更対象外シ ート) は、見出しに何らかの色を設定してください。
変更対象外シートの名前とマクロで自動設定される名前が重複する場合、変更対象外シートには、ランダムな名前が設定されます。
ワークシート数が999を超えるブックには対応していません。
基準名は自由に設定できますが、シート名に設定できる文字数が 31 文字までのため、マクロ内では、連番の 3 桁を引いた 28 文字までに制限しています。

■参考動画


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

サンプルコード2023.05.24 更新日:2026.04.05

コードの貼り付け場所   VBAコードをカラーで印刷・Web掲載するためのツールはこちら

'***************************************************************
'* アクティブブックのワークシート名を一括変更する
'*--------------------------------------------------------------
'* 概要     | アクティブブックのワークシート名を
'*          | [基準名]+[3桁連番]に一括変更する
'*          | タブに色がついていないシートのみを変更対象とする
'*          | ※ワークシート数が999を超えるブックには対応していない
'*          | ※シート名の文字数制限により基準名は最大28文字まで
'*          | 参考:https://excel.syogyoumujou.com/vba/rename_worksheets.html
'* 引数     | なし
'* 戻り値   | なし
'* 作成日   | 2023.05.24
'*--------------------------------------------------------------
'* 改修履歴 | 2026.04.05
'***************************************************************
Public Sub renameActiveWorkbookSheets()

On Error GoTo LBL_ERROR

    '------------------------------
    ' 定数定義
    '------------------------------
    Const BASE_NAME As String = "サンプル" ' 基準名

    '------------------------------
    ' 処理実行前確認
    '------------------------------
    Dim strErrorMessage As String
    ' ブックが保護されている場合は終了
    If ActiveWorkbook.ProtectWindows Then
        strErrorMessage = "ブックが保護されています"
        GoTo LBL_ERROR
    End If

    ' 基準名の文字数確認
    If 28 < Len(BASE_NAME) Then
        strErrorMessage = "基準名が長すぎます (最大28文字)"
        GoTo LBL_ERROR
    End If

    '------------------------------
    ' ワークシート名を配列に格納
    '------------------------------
    Dim i               As Long
    Dim lngCount        As Long
    Dim strSheetsName() As String

    With ActiveWorkbook
        For i = 1 To .Worksheets.Count
            ReDim Preserve strSheetsName(lngCount)
            strSheetsName(lngCount) = .Worksheets(i).Name
            lngCount = lngCount + 1
        Next i
    End With

    If lngCount = 0 Then
        strErrorMessage = "ワークシートがありません"
        GoTo LBL_ERROR
    ElseIf 999 < lngCount Then
        strErrorMessage = "ワークシートが多すぎます"
        GoTo LBL_ERROR
    End If

    '------------------------------
    ' 新しいシート名の生成
    '------------------------------
    ' [基準名]+[3桁連番]の形式で新しい名前を生成
    Dim strNewSheetsName() As String
    ReDim strNewSheetsName(0 To lngCount - 1)
    For i = 0 To lngCount - 1
        strNewSheetsName(i) = BASE_NAME & Format$(i + 1, "000")
    Next i

    '------------------------------
    ' シート名の重複確認と仮名設定
    '------------------------------
    ' 新しい名前が既存のシート名と重複する場合は仮のシート名を設定
    Dim varMatch    As Variant
    Dim varMatchRnd As Variant
    Dim strRndName  As String
    Dim strWshName  As String
    Dim wsh         As Worksheet

    For i = 0 To lngCount - 1
        varMatch = Application.Match(strNewSheetsName(i), strSheetsName, 0)
        If Not IsError(varMatch) Then
            Set wsh = ActiveWorkbook.Worksheets(strSheetsName(varMatch - 1))
            strWshName = Left$(wsh.Name, 26) & "_"
            Do
                strRndName = strWshName & WorksheetFunction.RandBetween(1, 1000)
                varMatchRnd = Application.Match(strRndName, strSheetsName, 0)
            Loop Until IsError(varMatchRnd)
            wsh.Name = strRndName
            strSheetsName(varMatch - 1) = strRndName
        End If
    Next i

    '------------------------------
    ' 新しいシート名の設定
    '------------------------------
    ' タブに色がついていないシートのみ連番を設定する
    Application.ScreenUpdating = False

    Dim lngRenameCount As Long
    For i = 0 To lngCount - 1
        Set wsh = ActiveWorkbook.Worksheets(strSheetsName(i))
        If wsh.Tab.ColorIndex = xlNone Then
            wsh.Name = strNewSheetsName(lngRenameCount)
            lngRenameCount = lngRenameCount + 1
        End If
    Next i

    Application.ScreenUpdating = True
    Exit Sub

'------------------------------
' エラー処理
'------------------------------
LBL_ERROR:
    Application.ScreenUpdating = True
    If Err.Number <> 0 Then
        strErrorMessage = "エラー番号:" & Err.Number & vbLf & Err.Description
    End If
    MsgBox strErrorMessage, vbExclamation, "終了します"
End Sub

ページトップへ戻る

Excel 汎用コード

Copyright(C) 2009- 坂江 保 All Rights Reserved.