
Excel VBAで「シート名変更」で、シートの名前をプログラムで動的に変更できます。手動で変更するのではなく、VBAコードを使って名前を変更することで、自動化が可能です。具体的な使い方や、注意点やサンプルコードを紹介します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 命令の意味は分かるけど、何に使うのか分からないと感じている方へ。 データ分割を題材に、実務の流れの中で理解できる講座です。 ↓↓↓↓↓
30万人が読んだ記事をもとに再構成。
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Excel VBA シート名変更の利用
以下のようなシーンで利用されます。
・データをインポートするたびにシート名に日付を付けて管理
・複数のレポートを生成する際に、それぞれのシート名をプロジェクト名やカテゴリに変更
・多くのシートがある場合、目的に応じてシート名を整理して変更
Excel VBA シート名変更|使い方とポイント
シート名を変更するには、Nameプロパティを使います。対象となるシートを特定して、そのNameプロパティに新しい名前を代入します。
・重複禁止
同じブック内でシート名が重複するとエラーが発生します。既に使用されている名前を避けましょう。
・長すぎる名前に注意
シート名は31文字までで、これを超えるとエラーになります。
・特殊文字の使用制限
シート名には、/、\、?、*、[、]などの特殊文字を使用できません。
Excel VBA シート名変更のサンプルコード
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
命令の意味は分かるけど、何に使うのか分からないと感じている方へ。
30万人が読んだ記事をもとに再構成。
データ分割を題材に、実務の流れの中で理解できる講座です。
↓↓↓↓↓
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
特定のシート名を変更
- 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で適切に処理することが重要です。
このコード、実はChatGPTでも作れます 今回紹介したマクロは、ChatGPTを活用することで自分でも作れるようになります。 ただし、多くの方が、 そこで、実際の業務でよく使われる これらを題材に、ChatGPTを使ったExcel業務自動化の方法をまとめました。 この教材で学べること ✅ ChatGPTでVBAを書く方法 VBAを一から勉強するのではなく、ChatGPTを活用して仕事を効率化したい方へ。
・エラーが出る
・思った通りに動かない
・修正方法が分からない
という壁にぶつかります。
✅ エラーを修正する方法
✅ CSV取込を自動化する方法
✅ シート分割・シート結合を自動化する方法
✅ すぐ使える実務プロンプト集

