ワークシート名を一括置換するマクロ(結果シート付き)

Excelのワークシート名を一括置換するVBAマクロの紹介

Excelの作業中に、複数のワークシートの名前を一括で置換したいと思ったことはありませんか? この記事では、そのようなニーズを簡単に実現するVBAマクロの紹介をします。

このマクロの主な機能

  • Excel内のすべてのワークシート名を一括で置換します。
  • ユーザーが指定した文字列を検索し、新しい文字列に置換します。
  • グラフシートも置換の対象としています。
  • 置換の履歴を新しいワークシートに保存します。

マクロのコード

標準モジュールに、以下のコードを挿入してください。

VBAエディターの起動はAlt + F11キーです。

標準モジュールは「挿入」→「標準モジュール」で作成されます。

Sub ReplaceWorksheetNames()

    Dim sht As Object
    Dim searchStr As String, replaceStr As String
    Dim newName As String
    Dim logWs As Worksheet
    Dim nextRow As Long
    Dim timeStamp As String
    Dim origWs As Worksheet
    Dim origCell As Range

    ' 現在のアクティブシートとアクティブセルを記憶
    Set origWs = ActiveSheet
    Set origCell = ActiveCell

    ' 検索文字列と置換文字列をユーザーに入力させる
    searchStr = Application.InputBox("検索する文字を入力してください:", "検索文字")
    If searchStr = "False" Then Exit Sub

    replaceStr = Application.InputBox("置換後の文字を入力してください:", "置換文字")
    If replaceStr = "False" Then Exit Sub

    ' 置換文字にワークシート名として使用できない文字が含まれているかをチェック
    If InStr(replaceStr, "\") > 0 Or InStr(replaceStr, "/") > 0 Or _
       InStr(replaceStr, "*") > 0 Or InStr(replaceStr, "?") > 0 Or _
       InStr(replaceStr, "[") > 0 Or InStr(replaceStr, "]") > 0 Or _
       InStr(replaceStr, ":") > 0 Then
        MsgBox "エラー: 置換文字にワークシート名として使用できない文字が含まれています。"
        Exit Sub
    End If

    ' ログを書き込むワークシートを作成(末尾に)
    timeStamp = Format(Now, "yyyymmddhhmmss")
    Set logWs = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    logWs.Name = "s_result(" & timeStamp & ")"
    logWs.Cells(1, 1).Value = "置換された元のシート名"
    logWs.Cells(1, 2).Value = "置換したシート名"
    nextRow = 2

    ' 各シート(ワークシート&グラフシート)の名前を検査して置換
    For Each sht In ThisWorkbook.Sheets
        If sht.Name <> logWs.Name Then
            If InStr(1, sht.Name, searchStr, vbTextCompare) > 0 Then
                newName = Replace(sht.Name, searchStr, replaceStr)
                If WorksheetExists(newName) Or Len(newName) > 31 Then
                    MsgBox "エラー: シート「" & sht.Name & "」の置換後の名前「" & newName & "」が無効です。"
                    Exit Sub
                Else
                    logWs.Cells(nextRow, 1).Value = sht.Name
                    sht.Name = newName
                    logWs.Cells(nextRow, 2).Value = newName
                    nextRow = nextRow + 1
                End If
            End If
        End If
    Next sht

    ' オリジナルのセル位置に戻す
    origWs.Activate
    origCell.Activate

    MsgBox "置換が完了しました。結果は「" & logWs.Name & "」シートに記録されています。"

End Sub

Function WorksheetExists(wsName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(wsName)
    On Error GoTo 0
    If Not ws Is Nothing Then WorksheetExists = True
End Function

マクロの実行手順

  1. まず、ExcelのVBAエディタ(Alt + F11キー)から標準モジュールにマクロを追加します(挿入→標準モジュール)。
  2. Alt + F8から「ReplaceWorksheetNames」マクロを実行すると、検索する文字列と置換する文字列を入力するためのダイアログボックスが表示されます。

  3. 指定した文字列を元に、ワークシート名が一括で置換されます。ただし検索する文字列を含むシートがなければ置換は起こりません。
  4. 置換の履歴シートが末尾に作成されます。

実行後の確認点

マクロの実行後、以下の点を確認してください:

  • ワークシート名が指定した文字列に置換されていること。
  • 「s_result(日付時刻)」という名前の新しいワークシートが作成され、置換の履歴が記録されていること。

使用時の注意点

このマクロを使用する際の注意点は以下の通りです:

  • 置換後のワークシート名がExcelの制限(31文字以内)を超えていないか確認してください。
  • 置換することでワークシート名が重複しないように注意してください。
  • シート名に使用できない文字 (:\*_*[]) を置換後の文字列に使用しないでください。
  • 重要なデータが含まれるワークブックを操作する前に、必ずバックアップを取ってください。

以上、Excelのワークシート名を一括で置換するVBAマクロの紹介でした。このマクロを使用することで、ワークシート名の一括編集が簡単になります。ぜひお試し下さい。

コメント