VBAで帳票や集計シートを自動作成する場合、「シートを追加したあとに任意の名前を付けたい」という場面は非常によくあります。
しかし、Sheets.Addでシートを追加しただけでは「Sheet1」「Sheet2」のような名前のままとなり、その後の処理でどのシートを対象にすればよいのか分かりにくくなることがあります。また、シート名の付け方を誤るとエラーが発生することも少なくありません。
この記事では、Sheets.AddメソッドとNameプロパティを組み合わせてシートを追加し、分かりやすい名前を付ける方法を解説します。実務で保守しやすいコードを書くための考え方もあわせて紹介します。
✅ VBAでシートを追加して名前を付ける基本
シートを追加して名前を変更する処理は、VBAでは頻繁に利用されます。しかし、単に動くコードを書くのではなく、「あとから読み返しても分かりやすい」「別のブックでも流用しやすい」構成を意識することが大切です。
ここでは、まず基本的な書き方を確認し、その後で実務向けの書き方へ発展させていきます。
・Sheets.Addメソッドでシートを追加する
シートを追加するには、Sheets.Addメソッドを使用します。
基本構文は次のとおりです。
Sheets.Add
このコードを実行すると、新しいシートが追加されます。
ただし、このままでは
- Sheet1
- Sheet2
- Sheet3
のような自動生成された名前になります。
実務では、そのまま利用するケースはほとんどありません。
例えば、
- 売上集計
- 月次報告
- 作業用
- 集計結果
など、用途が分かる名前を付けることが一般的です。
・Nameプロパティでシート名を変更する
追加したシートへ名前を付けるには、Nameプロパティを利用します。
例えば次のように書けます。
Sheets.Add
ActiveSheet.Name = "売上集計"
これで追加されたシート名が「売上集計」になります。
ただし、この書き方は実務ではあまりおすすめできません。
理由は、ActiveSheetは現在アクティブなシートに依存するためです。
ユーザーの操作や他の処理によってアクティブシートが変わると、想定とは異なるシートの名前を変更してしまう可能性があります。
そのため、実務では追加したシートを変数へ格納して扱う方法が推奨されます。
シート名は自由に設定できますが、分かりやすい命名ルールを決めておくことで、ブックの管理や保守性が大きく向上します。実務で役立つ命名の考え方については、「シート名の変更・管理・命名ルール」の記事もぜひ参考にしてください。
✅ 実務では追加したシートを変数で管理する
「とりあえず動くコード」と「保守しやすいコード」の違いは、対象となるオブジェクトをどれだけ明確に管理しているかです。
追加したシートをそのままActiveSheetで扱うこともできますが、処理が増えるほど思わぬ不具合の原因になります。
ここでは、実務でも流用しやすい書き方を紹介します。
・追加したシートを変数へ格納する理由
追加したシートを変数へ格納すると、その後の処理対象が明確になります。
例えば、
- 名前を変更する
- セルへ値を入力する
- 書式を設定する
- 印刷設定を行う
といった処理でも、どのシートを対象としているのかが一目で分かります。
また、途中で別のシートがアクティブになっても、処理対象は変わりません。
そのため、保守性・再利用性の高いコードになります。
・実務向けのサンプルコード
次のコードは、追加したシートを変数で管理し、そのシートへ名前を付ける実務向けの例です。
Sub AddWorksheetWithName()
'追加したシートを保持する
Dim addedWorksheet As Worksheet
'シートを追加して変数へ格納
Set addedWorksheet = ThisWorkbook.Worksheets.Add
'シート名を設定
addedWorksheet.Name = "売上集計"
End Sub
この書き方では、追加したシートをaddedWorksheetという変数で保持しています。
変数名を見ただけで、「追加したワークシート」であることが分かるため、後からコードを見返した場合でも処理内容を理解しやすくなります。
また、ThisWorkbookを使用しているため、マクロを保存しているブックを対象に処理が行われます。複数のブックを開いている環境でも、意図しないブックへシートを追加するリスクを減らせる点も実務で採用される理由の一つです。
シート名をコードへ直接記述するのではなく、定数として管理すると、仕様変更にも対応しやすくなります。保守性をさらに高めたい方は、「Public Constを使用してシート名・セルの値を定数に設定する方法」の記事も参考にしてください。
・この書き方を採用する理由
同じ処理であれば、
Sheets.Add
ActiveSheet.Name = "売上集計"
のように短く書くこともできます。
しかし、実務では処理が途中で増えることがほとんどです。
例えば、
- シートへ見出しを作成する
- 列幅を設定する
- テーブルを作成する
- 印刷設定を行う
などの処理が追加されると、ActiveSheetへ依存したコードは保守が難しくなります。
一方、追加したシートを変数で保持しておけば、すべての処理対象が明確になり、仕様変更にも対応しやすくなります。
そのため、実務ではこちらのような書き方が推奨されます。
✅ シート名を設定するときに知っておきたい注意点
シートを追加して名前を付ける処理は簡単に見えますが、実務ではエラーになりやすいポイントがいくつかあります。
特に「同じシート名が既に存在する」「シート名に使用できない文字を含めてしまう」といったケースは、運用開始後によく発生します。こうしたトラブルを事前に理解しておくことで、より安全で保守しやすいマクロを作成できます。
・同じシート名は設定できない
Excelでは、同じブック内に同名のシートは作成できません。
例えば、既に「売上集計」というシートが存在する状態で、
addedWorksheet.Name = "売上集計"
を実行するとエラーになります。
これはVBAの問題ではなく、Excelの仕様です。
そのため、実務では次のような対策がよく採用されます。
- シートが存在するか事前に確認する
- 存在する場合は処理を中止する
- 日付や連番を付けて重複を避ける
毎月の帳票や日次レポートを自動作成する場合は、この考え方を取り入れておくと安心です。
同じシート名によるエラーを防ぐ方法として、日付や連番をシート名へ付けるケースもよくあります。日付や数値を文字列へ変換する方法については、「Format関数で文字列に変換する方法」の記事もあわせてご覧ください。
・シート名に使用できない文字がある
シート名には、使用できない文字があります。
代表的なものは次のとおりです。
\/?*[]:
また、シート名は31文字までという制限もあります。
例えば、ファイル名や日付文字列をそのままシート名に使用すると、これらの文字が含まれてエラーになることがあります。
そのため、ユーザーが入力した文字列や外部ファイル名を利用する場合は、事前に使用できない文字が含まれていないか確認することが重要です。
✅ 実務ではルールを決めてシート名を付けるのがおすすめ
シート名は自由に付けられるため、プロジェクトごとにバラバラな命名になってしまうことがあります。
しかし、実務ではシート名の付け方にも一定のルールを設けることで、後からコードを修正したり、別の担当者へ引き継いだりするときに理解しやすくなります。
ここでは、保守性を高めるための考え方を紹介します。
・日付や連番を付けると管理しやすい
毎月や毎日のシートを作成する場合は、日付や連番を付ける方法がよく利用されます。
例えば、
- 売上集計_202608
- 売上集計_20260803
- 売上集計_001
のような名前にすると、シートの用途や作成タイミングが一目で分かります。
また、同名シートによるエラーも防ぎやすくなるため、実務では非常に有効な方法です。
シート名のルールを統一しておくことで、後から検索や管理もしやすくなります。
「202608」「2026-08-03」のような日付付きシートを自動作成する場合は、Format関数を組み合わせると柔軟に命名できます。詳しい使い方は、「Format関数の使い方」の記事で解説しています。
・処理対象のシートを変数で使い続ける
追加したシートを変数へ格納したら、その後の処理も同じ変数を利用するようにしましょう。
例えば、
- 見出しを入力する
- 列幅を設定する
- 表を作成する
- 印刷設定を行う
といった処理も、
addedWorksheet.Range("A1").Value = "売上"
のように、追加したシートを示す変数を利用して記述します。
このように書くことで、
- どのシートを操作しているかが分かりやすい
- 他のシートがアクティブになっても影響を受けない
- 処理を別のブックへ流用しやすい
といったメリットがあります。
実務では、一貫して同じ変数を利用することが、保守しやすいコードを書く基本になります。
今回は追加したシートを変数で管理する方法を紹介しましたが、アクティブシートを取得・変更する方法や使い分けについて詳しく知りたい方は、「アクティブシートの指定・変更・シート名取得・値参照」の記事も参考になります。
・追加後の処理まで見据えた設計を意識する
シートを追加して名前を付けることは、ほとんどの場合「最終目的」ではありません。
実際の業務では、その後に
- データを書き込む
- テーブルを作成する
- 数式を設定する
- 印刷用レイアウトを整える
- 保存・出力する
といった処理が続きます。
そのため、「シートを追加する処理」だけを考えるのではなく、その後の処理をスムーズにつなげられる設計を意識することが大切です。
今回紹介したように、追加したシートを変数へ格納して管理する方法であれば、その後の処理も同じ変数を利用できるため、コード全体の見通しが良くなります。
実務では、このように「今の処理だけではなく、次の処理も考えた設計」が保守性の高いマクロにつながります。
✅ まとめ:Sheets.AddとNameプロパティで保守しやすくシートを追加しよう
Sheets.AddメソッドとNameプロパティを組み合わせることで、新しいシートを追加し、用途に応じた分かりやすいシート名を設定できます。
ただし、実務では単にシートを追加するだけでなく、その後の処理まで考慮した設計が重要です。
今回のポイントを振り返ると、次のとおりです。
Sheets.Addメソッドで新しいシートを追加できるNameプロパティで分かりやすいシート名を設定できるActiveSheetではなく、追加したシートを変数へ格納して管理する方が保守しやすい- 同名シートや使用できない文字によるエラーに注意する
- 日付や連番を利用するとシート管理がしやすくなる
- シート追加後の処理まで見据えてコードを設計すると、再利用性と保守性が高まる
シートを追加して名前を付ける処理は、多くのVBAマクロで利用される基本機能です。今回紹介したような実務向けの設計を取り入れることで、将来の仕様変更や機能追加にも対応しやすい、読みやすく保守しやすいコードを書けるようになるでしょう。