【ExcelVBA】シートを追加するAddメソッドの使い方

仕事効率化
スポンサーリンク

  • VBAでシートを追加するにはどうすればいいの?
  • 先頭や末尾など、任意の位置にシートを追加したい
  • 追加したシートのシート名を任意の名前に変更したい
と思ったこともあるのではないでしょうか。

そこで今回は、VBAでシートを追加する方法について紹介します。

先頭や末尾など任意の位置に追加する方法や、追加シートの名前を変更する方法も紹介します。シート追加は実務での使用頻度も高く、汎用性もある処理なので、ぜひ覚えておきましょう。

スポンサーリンク

Addメソッドの使い方

Addメソッドの基本構文

  1. 基本構文
Worksheets.Add [Before], [After], [Count], [Type]
  • 追加された直後のシートは「Active」になる
  • 「Count」を指定すると複数シートを追加できるが、追加シートの特定が難しくなるので基本的には指定しない
  1. コード例
Worksheets.Add
「Before」「After」ともに省略した場合、「ActiveSheet」の前に追加されます。
01_VBAAdd実行イメージ 例では「サンプル」シートが「Active」の状態で実行しているため、「サンプル」シートの前に新規シートが追加され、「ActiveSheet」となります。

Addメソッドの引数一覧

引数省略詳細
Before省略可指定したシートの前(左)に新規シートを追加
After省略可指定したシートの後ろ(右)に新規シートを追加
Count省略可指定した数の新規シートを追加
2枚目以降のシートは直前に追加されたシートの前(左)に追加される
Type省略可定数を指定することで「ワークシート」「グラフシート」など任意の形式のシートを追加できる
  • 「Count」を指定すると複数シートを追加できるが、追加シートの特定が難しくなるので基本的には指定しない

Addメソッドでシートを追加する

先頭にシートを追加するサンプルコード

'先頭(一番左)に追加
Worksheets.Add Before:=ThisWorkbook.Worksheets(1)
引数「Before」にマクロ実行ブック1枚目のワークシート「ThisWorkbook.Worksheets(1)」を指定して、先頭(一番左)にワークシートを追加しています。
02_VBAAdd先頭に追加イメージ

末尾にシートを追加するサンプルコード

'末尾(一番右)に追加
Dim shCnt As Long
shCnt = ThisWorkbook.Worksheets.Count
Worksheets.Add After:=ThisWorkbook.Worksheets(shCnt)
まず、マクロ実行ブックにあるワークシートの数を「Coun」プロパティで取得、変数「shCnt」に定義します。これで、変数「shCnt」を使って末尾のワークシート「ThisWorkbook.Worksheets(shCnt)」を取得することができます。

最後に、引数「After」に末尾のワークシートを指定すれば、末尾(一番右)にワークシートを追加することができます。
03_VBAAdd末尾に追加イメージ

任意のシートの前にシートを追加するサンプルコード

'任意のシートの前(左)に追加
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("サンプル")
Worksheets.Add Before:=trgtSh
まず、「サンプル」シートを変数「trgtSh」に定義します。つづいて、引数「Before」に「trgtSh」を指定することで任意のシート「サンプル」の前(左)に新規シートを追加しています。
04_VBAAdd任意のシートの前に追加イメージ

任意のシートの後ろにシートを追加するサンプルコード

'任意のシートの後ろ(右)に追加
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("サンプル")
Worksheets.Add After:=trgtSh
まず、「サンプル」シートを変数「trgtSh」に定義します。つづいて、引数「After」に「trgtSh」を指定することで任意のシート「サンプル」の後ろ(右)に新規シートを追加しています。
05_VBAAdd任意のシートの後ろに追加イメージ

Worksheets.Addを使う際のポイント

追加シートの名前を変える

新規でシートを追加すると、自動的に「Sheet〇」という名前がつきます。ただ実務では、追加シートを任意の名前に変えたいことがほとんどです。

そこで、追加シートの名前を変える方法を2つ紹介します。
  • シート追加直後に「ActiveSheet」の名前を変える
  • 追加シートを変数に定義して名前を変える

シート追加直後に「ActiveSheet」の名前を変える

これまで紹介してきたように、「Worksheets.Add」で追加されたシートは追加直後「Active」となります。

この性質を利用して、「Worksheet.Add」直後にシートの名前を変えられる「Name」プロパティを使用し「ActiveSheet.Name」とすることで、追加したシートの名前を変更することができます。
'作業シートの前(左)側に追加
Worksheets.Add

'「ActiveSheet」となっている追加シートの名前を変更
ActiveSheet.Name = "追加シート"
06_VBAAdd追加シートの名前を変更_ActiveSheetName

追加シートを変数に定義して名前を変える

追加シートの名前を変更するだけで処理が終わる場合は、すでに紹介した「ActiveSheet.Name」を実行するだけで十分です。しかし実務では、追加したシートの名前を変え、続けてさらに複数の処理を加えることも多いです。

そうした場合、はじめから追加シートを変数に定義しておくと、その後の処理も書きやすく、予期せぬ動作が起きないコードになります。

また「Worksheets.Add」を変数に定義する場合は、必ず最後に「”()”」をつけるようにしてください。「Before」や「After」といった引数も、この「”()”」の中に書きましょう。
  • 「Worksheets.Add」を変数に定義する場合
    • 「Set 変数 = Worksheets.Add()」
  • 「Worksheets.Add」を変数に定義して引数を指定する場合
    • 「Set 変数 = Worksheets.Add(Before:=対象シート)」
'追加シートを変数「addSheet」に定義
Dim addSheet As Worksheet
Set addSheet = Worksheets.Add()

'「addSheet」の名前を変更
addSheet.Name = "追加シート
07_VBAAdd追加シートの名前を変更_変数定義

引数「Count」はなるべく使わない

「Worksheets.Add」実行時、引数「Count」を指定すると、一度に複数のシートが追加できますが、注意しなければならないことがあります。

「Count」を指定すると、次の画像のように最後に追加された1枚のシートだけが「ActiveSheet」となるため、それまでに追加されたシートの特定が難しくなります。
08_VBAAdd追加シートCount指定
以上の理由から、引数「Count」は使わないようにしましょう。もし一度に複数のシートを追加して、各シート名を変えたい場面があれば「For」ループなどを使用して、1枚ずつ処理していく方法をとりましょう。

シートを追加するAddメソッドまとめ

今回はVBAで「Add」メソッドを使って、任意の位置にシートを追加する方法について紹介しました。
紹介した「Add」メソッドでのシート追加例
  • 先頭にシートを追加する
  • 末尾にシートを追加する
  • 任意のシートの前にシートを追加する
  • 任意のシートの後ろにシートを追加する
また、あわせて紹介した「追加シートの名前を変える」『引数「Count」はなるべく使わない』というポイントも覚えておきましょう。
シート追加は使う場面も多く、汎用性も高い処理なので、ぜひ使いこなしてみてください。