LoginSignup
1
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-18

使い方
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

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6