Excel VBA シート名をプログラムで自動的に変更する方法

 

Excel VBAで「シート名変更」で、シートの名前をプログラムで動的に変更できます。手動で変更するのではなく、VBAコードを使って名前を変更することで、自動化が可能です。具体的な使い方や、注意点やサンプルコードを紹介します。

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

命令の意味は分かるけど、何に使うのか分からないと感じている方へ。
30万人が読んだ記事をもとに再構成。

データ分割を題材に、実務の流れの中で理解できる講座です。

↓↓↓↓↓
自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

Excel VBA シート名変更の利用

以下のようなシーンで利用されます。

・データをインポートするたびにシート名に日付を付けて管理

・複数のレポートを生成する際に、それぞれのシート名をプロジェクト名やカテゴリに変更

・多くのシートがある場合、目的に応じてシート名を整理して変更

 

Excel VBA シート名変更|使い方とポイント

使い方

シート名を変更するには、Nameプロパティを使います。対象となるシートを特定して、そのNameプロパティに新しい名前を代入します。

 

ポイント

・重複禁止
同じブック内でシート名が重複するとエラーが発生します。既に使用されている名前を避けましょう。

・長すぎる名前に注意
シート名は31文字までで、これを超えるとエラーになります。

・特殊文字の使用制限
シート名には、/、\、?、*、[、]などの特殊文字を使用できません。

 

Excel VBA シート名変更のサンプルコード

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

命令の意味は分かるけど、何に使うのか分からないと感じている方へ。
30万人が読んだ記事をもとに再構成。

データ分割を題材に、実務の流れの中で理解できる講座です。

↓↓↓↓↓
自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

特定のシート名を変更

  1. Option Explicit
  2. Sub RenameSheet()
  3.     ' "Sheet1" のシート名を "データシート" に変更
  4.     Worksheets("Sheet1").Name = "データシート"
  5. End Sub

現在のシート名を日付に変更

  1. Option Explicit
  2. Sub RenameSheetToDate()
  3.     ' アクティブなシートの名前を現在の日付に変更
  4.     ActiveSheet.Name = Format(Date, "yyyy-mm-dd")
  5. End Sub

複数のシート名を順番に変更

  1. Option Explicit
  2. Sub RenameAllSheets()
  3.     Dim ws As Worksheet
  4.     Dim i As Integer
  5.     i = 1
  6.     
  7.     ' 全シートを順に名前を「シート1」、「シート2」...に変更
  8.     For Each ws In ThisWorkbook.Worksheets
  9.         ws.Name = "シート" & i
  10.         i = i + 1
  11.     Next ws
  12. 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ファイルを保存、閉じて終了する。

 

使うVBA命令の解説

Application.FileDialog
ファイルを開くダイアログを表示します。

InputBox
ユーザーに文字列入力を求めます。

InStr
文字列内に検索語が含まれるか調べます(部分一致)

Replace
検索語を別の文字列に置き換えます。

Len
文字列の長さをチェック(31文字制限)

Dictionary
シート名の重複チェック用に使用する。

関数で禁止文字( `/ \ ? * [ ]`)が含まれていないかチェックします。

 

以下コードを標準モジュールに貼り付けて実行してください。

 

  1. Sub シート名一括置換()
  2.     Dim fd As FileDialog
  3.     Dim filePath As String
  4.     Dim wb As Workbook
  5.     Dim ws As Worksheet
  6.     Dim searchStr As String
  7.     Dim replaceStr As String
  8.     Dim i As Long
  9.     Dim sheetName As String
  10.     Dim newName As String
  11.     Dim replaceCount As Long
  12.     Dim sheetNamesDict As Object
  13.     Dim isValid As Boolean
  14.     
  15.     ' ファイル選択
  16.     Set fd = Application.FileDialog(msoFileDialogFilePicker)
  17.     With fd
  18.         .Title = "Excelファイルを選択してください"
  19.         .Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm", 1
  20.         If .Show <> -1 Then Exit Sub
  21.         filePath = .SelectedItems(1)
  22.     End With
  23.     ' 入力受付(検索文字列)
  24.     searchStr = InputBox("シート名の検索文字列を入力してください", "検索文字列")
  25.     If searchStr = "" Then Exit Sub
  26.     ' 入力受付(置換文字列)+バリデーション付き再入力ループ
  27.     Do
  28.         replaceStr = InputBox("シート名の置換文字列を入力してください", "置換文字列")
  29.         
  30.         If replaceStr = "" Then Exit Sub
  31.         
  32.         If ContainsInvalidChars(replaceStr) Then
  33.             MsgBox "置換シート名に特殊文字( / \ ? * [ ] )は使用できません。", vbExclamation
  34.             isValid = False
  35.         Else
  36.             isValid = True
  37.         End If
  38.     Loop Until isValid
  39.     ' ワークブックを開く
  40.     Set wb = Workbooks.Open(filePath)
  41.     
  42.     Set sheetNamesDict = CreateObject("Scripting.Dictionary")
  43.     replaceCount = 0
  44.     ' 一括処理
  45.     For Each ws In wb.Sheets
  46.         sheetName = ws.Name
  47.         If InStr(sheetName, searchStr) > 0 Then
  48.             newName = Replace(sheetName, searchStr, replaceStr)
  49.             
  50.             ' 長さ制限チェック
  51.             If Len(newName) > 31 Then
  52.                 MsgBox "シート名が31文字を超えています:" & vbCrLf & newName, vbCritical
  53.                 wb.Close SaveChanges:=False
  54.                 Exit Sub
  55.             End If
  56.             
  57.             ' 重複チェック
  58.             If sheetNamesDict.exists(newName) Then
  59.                 MsgBox "シート名が重複します:" & vbCrLf & newName, vbCritical
  60.                 wb.Close SaveChanges:=False
  61.                 Exit Sub
  62.             End If
  63.             
  64.             sheetNamesDict.Add newName, True
  65.             ws.Name = newName
  66.             replaceCount = replaceCount + 1
  67.         Else
  68.             sheetNamesDict(ws.Name) = True
  69.         End If
  70.     Next
  71.     MsgBox replaceCount & " 件のシート名を置換しました。", vbInformation
  72.     wb.Save
  73.     wb.Close
  74. End Sub
  75. ' 特殊文字チェック関数
  76. Function ContainsInvalidChars(str As String) As Boolean
  77.     Dim invalidChars As Variant
  78.     Dim ch As Variant
  79.     invalidChars = Array("/", "\", "?", "*", "[", "]")
  80.     For Each ch In invalidChars
  81.         If InStr(str, ch) > 0 Then
  82.             ContainsInvalidChars = True
  83.             Exit Function
  84.         End If
  85.     Next
  86.     ContainsInvalidChars = False
  87. End Function

 

ExcelVBAを使ったシート名の変更は、シート管理の自動化やプロジェクトに応じた動的な処理に役立ちます。手動で名前を付ける手間を省き、エラーを防ぐためにも、シート名の変更をVBAで適切に処理することが重要です。

 

このコード、実はChatGPTでも作れます

今回紹介したマクロは、ChatGPTを活用することで自分でも作れるようになります。

ただし、多くの方が、
・エラーが出る
・思った通りに動かない
・修正方法が分からない
という壁にぶつかります。

そこで、実際の業務でよく使われる

  • 別ブックコピー
  • シート名変更
  • CSV取込
  • シート結合
  • シート分割

これらを題材に、ChatGPTを使ったExcel業務自動化の方法をまとめました。

この教材で学べること

✅ ChatGPTでVBAを書く方法
✅ エラーを修正する方法
✅ CSV取込を自動化する方法
✅ シート分割・シート結合を自動化する方法
✅ すぐ使える実務プロンプト集

VBAを一から勉強するのではなく、ChatGPTを活用して仕事を効率化したい方へ。

ChatGPTで作るExcel業務自動化スターターキットを見る(記事途中から有料:980円)