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
マクロの実行手順
- まず、ExcelのVBAエディタ(Alt + F11キー)から標準モジュールにマクロを追加します(挿入→標準モジュール)。
- Alt + F8から「ReplaceWorksheetNames」マクロを実行すると、検索する文字列と置換する文字列を入力するためのダイアログボックスが表示されます。
- 指定した文字列を元に、ワークシート名が一括で置換されます。ただし検索する文字列を含むシートがなければ置換は起こりません。
- 置換の履歴シートが末尾に作成されます。
実行後の確認点
マクロの実行後、以下の点を確認してください:
- ワークシート名が指定した文字列に置換されていること。
- 「s_result(日付時刻)」という名前の新しいワークシートが作成され、置換の履歴が記録されていること。
使用時の注意点
このマクロを使用する際の注意点は以下の通りです:
- 置換後のワークシート名がExcelの制限(31文字以内)を超えていないか確認してください。
- 置換することでワークシート名が重複しないように注意してください。
- シート名に使用できない文字 (
:\*_*[]
) を置換後の文字列に使用しないでください。 - 重要なデータが含まれるワークブックを操作する前に、必ずバックアップを取ってください。
以上、Excelのワークシート名を一括で置換するVBAマクロの紹介でした。このマクロを使用することで、ワークシート名の一括編集が簡単になります。ぜひお試し下さい。
コメント