Excel
VBA

Excelのシート名を一括変更するマクロ

使い方
1.コード1を実行してシート名一覧を作成する
2.シート名一覧のC列(変更後のシート名)を書き換える
3.コード2を実行する

コード1
'シート名を取得して新規シートに一覧出力する
Sub getAllSheetsName()

    Dim sname: sname = "シート名一覧_あとでこのシートは消してね"

    '作業用シートが存在していたら削除する
    Dim ws As Worksheet
    Dim flag As Boolean
    For Each ws In Worksheets
        If ws.Name = sname Then
            flag = True
            Exit For
        End If
    Next ws
    If flag = True Then
        Application.DisplayAlerts = False
        Worksheets(sname).Delete
        Application.DisplayAlerts = True
    End If


    '作業用シートを作成する
    Sheets.Add
    ActiveSheet.Name = sname

    'シート一覧を作成する
    Dim ss: Set ss = ActiveSheet
    ss.Cells(1, 2) = "シート名"
    ss.Cells(1, 3) = "変更後のシート名"
    Dim r: r = 2
    For Each ws In Sheets
        If ws.Name <> sname Then
            ss.Cells(r, 2) = ws.Name
            ss.Cells(r, 3) = ws.Name
            ss.Cells(r, 4) = "=B" & r & "=C" & r
            r = r + 1
        End If
    Next ws

    '見た目整理
    Columns("B:B").EntireColumn.AutoFit
    Columns("C:C").EntireColumn.AutoFit
    Range("B1:D1").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
    End With

    ss.Cells(1, 1).Select
End Sub
コード2
'シート名を一括変更する
Sub ChangeSheetName()
    Dim map As Dictionary: Set map = New Dictionary

    Dim sname: sname = "シート名一覧_あとでこのシートは消してね"
    Dim ss: Set ss = Sheets(sname)
    Dim r
    '// 変更前シート名をキー、変更後シート名を値としてマップに設定
    For r = 2 To 2000
        '変更前シート名無しの場合、終了
        If ss.Cells(r, 2) = "" Then
            Exit For
        End If

        '変更後シート名ありの場合、mapに保存
        If ss.Cells(r, 3) <> ss.Cells(r, 2) Then
            Call map.Add(ss.Cells(r, 2).Value, ss.Cells(r, 3).Value)
            ss.Cells(r, 2) = ss.Cells(r, 3)
        Else
        End If
    Next


    Dim sht         As Object       '// シート
    '// 全シートループ
    For Each sht In Sheets
        If map.Exists(sht.Name) Then
            sht.Name = map.Item(sht.Name)
        End If
    Next
End Sub