
Excel VBAで「シート名変更」で、シートの名前をプログラムで動的に変更できます。手動で変更するのではなく、VBAコードを使って名前を変更することで、自動化が可能です。具体的な使い方や、注意点やサンプルコードを紹介します。
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
目次
Excel VBA シート名変更の利用
以下のようなシーンで利用されます。
・データをインポートするたびにシート名に日付を付けて管理
・複数のレポートを生成する際に、それぞれのシート名をプロジェクト名やカテゴリに変更
・多くのシートがある場合、目的に応じてシート名を整理して変更
Excel VBA シート名変更|使い方とポイント
シート名を変更するには、Nameプロパティを使います。対象となるシートを特定して、そのNameプロパティに新しい名前を代入します。
・重複禁止
同じブック内でシート名が重複するとエラーが発生します。既に使用されている名前を避けましょう。
・長すぎる名前に注意
シート名は31文字までで、これを超えるとエラーになります。
・特殊文字の使用制限
シート名には、/、\、?、*、[、]などの特殊文字を使用できません。
Excel VBA シート名変更のサンプルコード
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
特定のシート名を変更
- Option Explicit
- Sub RenameSheet()
- ' "Sheet1" のシート名を "データシート" に変更
- Worksheets("Sheet1").Name = "データシート"
- End Sub
現在のシート名を日付に変更
- Option Explicit
- Sub RenameSheetToDate()
- ' アクティブなシートの名前を現在の日付に変更
- ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
- End Sub
複数のシート名を順番に変更
- Option Explicit
- Sub RenameAllSheets()
- Dim ws As Worksheet
- Dim i As Integer
- i = 1
- ' 全シートを順に名前を「シート1」、「シート2」...に変更
- For Each ws In ThisWorkbook.Worksheets
- ws.Name = "シート" & i
- i = i + 1
- Next ws
- End Sub
1.Worksheets("Sheet1").Name = "データシート"
"Sheet1" のシート名を "データシート" に変更します。
2.ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
アクティブなシート名を、現在の日付("2024-09-07"のような形式)に変更します。
3.For Each ws In ThisWorkbook.Worksheets
全てのシートをループして、それぞれ順番に名前を変更しています。
検索文字列が含まれる複数シート名を置換文字列に変更する
マクロ実行で、別のExcelファイルを指定して、そのシート名を一括で変更する処理になります。
1.Excelファイルを指定する。
ファイルを開くダイアログボックスを表示して、シート名変更するExcelファイルを指定する
2.変更するシート名部分一致文字列を入力する。
インプットボックスから検索文字を入力する。
検索文字列に入力した値がないと終了する。
3.変更するシート名を置換する部分文字を入力する。
インプットボックスから置換文字を入力する。
置換シート名に特殊文字がある場合は、再入力させる。
4.Excelファイルを開いて、すべてのシートの置換処理が終了するまで繰り返す。
指定したExcelファイルのシート名を部分一致文字列で検索して、部分一致したシート名を
対象に置換文字列で置換する。
置換後のシート名が31文字を超える場合はエラーを表示して終了する。
置換後のシート名に重複名はある場合はエラーを表示して終了する。
5.Excelファイルのシートすべての処理終了で、置換件数をメッセージボックスに表示する。
6.メッセージボックスのボタンOKでExcelファイルを保存、閉じて終了する。
Application.FileDialog
ファイルを開くダイアログを表示します。
InputBox
ユーザーに文字列入力を求めます。
InStr
文字列内に検索語が含まれるか調べます(部分一致)
Replace
検索語を別の文字列に置き換えます。
Len
文字列の長さをチェック(31文字制限)
Dictionary
シート名の重複チェック用に使用する。
関数で禁止文字( `/ \ ? * [ ]`)が含まれていないかチェックします。
以下コードを標準モジュールに貼り付けて実行してください。
- Sub シート名一括置換()
- Dim fd As FileDialog
- Dim filePath As String
- Dim wb As Workbook
- Dim ws As Worksheet
- Dim searchStr As String
- Dim replaceStr As String
- Dim i As Long
- Dim sheetName As String
- Dim newName As String
- Dim replaceCount As Long
- Dim sheetNamesDict As Object
- Dim isValid As Boolean
- ' ファイル選択
- Set fd = Application.FileDialog(msoFileDialogFilePicker)
- With fd
- .Title = "Excelファイルを選択してください"
- .Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm", 1
- If .Show <> -1 Then Exit Sub
- filePath = .SelectedItems(1)
- End With
- ' 入力受付(検索文字列)
- searchStr = InputBox("シート名の検索文字列を入力してください", "検索文字列")
- If searchStr = "" Then Exit Sub
- ' 入力受付(置換文字列)+バリデーション付き再入力ループ
- Do
- replaceStr = InputBox("シート名の置換文字列を入力してください", "置換文字列")
- If replaceStr = "" Then Exit Sub
- If ContainsInvalidChars(replaceStr) Then
- MsgBox "置換シート名に特殊文字( / \ ? * [ ] )は使用できません。", vbExclamation
- isValid = False
- Else
- isValid = True
- End If
- Loop Until isValid
- ' ワークブックを開く
- Set wb = Workbooks.Open(filePath)
- Set sheetNamesDict = CreateObject("Scripting.Dictionary")
- replaceCount = 0
- ' 一括処理
- For Each ws In wb.Sheets
- sheetName = ws.Name
- If InStr(sheetName, searchStr) > 0 Then
- newName = Replace(sheetName, searchStr, replaceStr)
- ' 長さ制限チェック
- If Len(newName) > 31 Then
- MsgBox "シート名が31文字を超えています:" & vbCrLf & newName, vbCritical
- wb.Close SaveChanges:=False
- Exit Sub
- End If
- ' 重複チェック
- If sheetNamesDict.exists(newName) Then
- MsgBox "シート名が重複します:" & vbCrLf & newName, vbCritical
- wb.Close SaveChanges:=False
- Exit Sub
- End If
- sheetNamesDict.Add newName, True
- ws.Name = newName
- replaceCount = replaceCount + 1
- Else
- sheetNamesDict(ws.Name) = True
- End If
- Next
- MsgBox replaceCount & " 件のシート名を置換しました。", vbInformation
- wb.Save
- wb.Close
- End Sub
- ' 特殊文字チェック関数
- Function ContainsInvalidChars(str As String) As Boolean
- Dim invalidChars As Variant
- Dim ch As Variant
- invalidChars = Array("/", "\", "?", "*", "[", "]")
- For Each ch In invalidChars
- If InStr(str, ch) > 0 Then
- ContainsInvalidChars = True
- Exit Function
- End If
- Next
- ContainsInvalidChars = False
- End Function
ExcelVBAを使ったシート名の変更は、シート管理の自動化やプロジェクトに応じた動的な処理に役立ちます。手動で名前を付ける手間を省き、エラーを防ぐためにも、シート名の変更をVBAで適切に処理することが重要です。
「Excel VBAで自動化するコードのベースが習得できる解説書」
Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。
