VBAで新しいシートを追加したり、既存のシートをコピーしたりすると、「Sheet1」や「データ (2)」のような仮の名前が付けられます。マクロの処理の一環として、これらのシートに「〇月度レポート」のような分かりやすい名前を自動で設定したい場面は非常に多いです。
この記事では、VBAでワークシートの.Name
プロパティを使い、シート名を変更する基本的な方法と、エラーを避けるために知っておくべき命名規則について解説します。
完成したVBAコード
シート名を変更するには、対象となるシートを指定して、その.Name
プロパティに新しい名前を代入します。対象シートの指定方法にはいくつかありますが、ここでは代表的な3つの方法を紹介します。
① シート名で指定する方法(基本)
現在表示されているシート名を基準に、新しい名前に変更します。
Sub RenameSheet_ByName()
' 「Sheet1」という名前のシートを「月次レポート」に変更
ThisWorkbook.Worksheets("Sheet1").Name = "月次レポート"
MsgBox "シート名を変更しました。"
End Sub
② インデックス番号で指定する方法
左からのタブの順番(インデックス番号)でシートを指定します。
Sub RenameSheet_ByIndex()
' 1番左にあるシートを「集計結果」に変更
ThisWorkbook.Worksheets(1).Name = "集計結果"
MsgBox "シート名を変更しました。"
End Sub
注意: この方法は、ユーザーがシートの順番を入れ替えると対象がズレるため、あまり推奨されません。
③ コードネームで指定する方法(推奨)
VBE(VBAの編集画面)のプロジェクトエクスプローラーで確認できる「コードネーム」でシートを指定します。これは、ユーザーがシート名を変更しても変わらない内部的な名前のため、最も安全で確実な方法です。
' VBEでコードネームが「Sheet1」であることを確認した場合
Sub RenameSheet_ByCodeName()
' コードネーム「Sheet1」のシート名を「マスターデータ」に変更
Sheet1.Name = "マスターデータ"
MsgBox "シート名を変更しました。"
End Sub
コードのポイント解説
.Name プロパティ
Worksheet
オブジェクトの.Name
プロパティは、シートタブに表示される名前を文字列として保持しています。このプロパティは読み書き可能で、新しい文字列を代入することで、シート名を変更できます。 Worksheets("古い名前").Name = "新しい名前"
シート名の命名規則と注意点
シート名を変更する際には、Excelのルールに従う必要があります。ルールに反した名前を付けようとすると、実行時エラーが発生します。
- 文字数: 31文字以内である必要があります。
- 使用できない文字: 以下の記号は使えません。
¥ / ? * [ ] :
- 一意性: 同じブック内で、他のシートと同じ名前を付けることはできません。
- 空文字: シート名を空にすることはできません。
VBAで動的にシート名を生成する際は、これらのルールに違反しないように注意が必要です。
まとめ
VBAでシート名を変更する際の基本は、対象シートの.Name
プロパティに新しい名前を代入することです。
対象シート.Name = "新しいシート名"
そして、対象シートを指定する方法として、ユーザーによるシート名の変更に影響されない**「コードネーム」を使うのが最も堅牢で推奨される方法**です。 マクロでレポートシートなどを自動生成する際には、最後に分かりやすい名前を付けてあげることで、ファイルの使いやすさが格段に向上します。