- VBAでシートを追加するにはどうすればいいの?
- 先頭や末尾など、任意の位置にシートを追加したい
- 追加したシートのシート名を任意の名前に変更したい
そこで今回は、VBAでシートを追加する方法について紹介します。
先頭や末尾など任意の位置に追加する方法や、追加シートの名前を変更する方法も紹介します。シート追加は実務での使用頻度も高く、汎用性もある処理なので、ぜひ覚えておきましょう。
Addメソッドの使い方
Addメソッドの基本構文
- 基本構文
Worksheets.Add [Before], [After], [Count], [Type]
- 追加された直後のシートは「Active」になる
- 「Count」を指定すると複数シートを追加できるが、追加シートの特定が難しくなるので基本的には指定しない
- コード例
Worksheets.Add
「Before」「After」ともに省略した場合、「ActiveSheet」の前に追加されます。例では「サンプル」シートが「Active」の状態で実行しているため、「サンプル」シートの前に新規シートが追加され、「ActiveSheet」となります。
Addメソッドの引数一覧
引数 | 省略 | 詳細 |
---|---|---|
Before | 省略可 | 指定したシートの前(左)に新規シートを追加 |
After | 省略可 | 指定したシートの後ろ(右)に新規シートを追加 |
Count | 省略可 | 指定した数の新規シートを追加 2枚目以降のシートは直前に追加されたシートの前(左)に追加される |
Type | 省略可 | 定数を指定することで「ワークシート」「グラフシート」など任意の形式のシートを追加できる |
- 「Count」を指定すると複数シートを追加できるが、追加シートの特定が難しくなるので基本的には指定しない
Addメソッドでシートを追加する
先頭にシートを追加するサンプルコード
'先頭(一番左)に追加
Worksheets.Add Before:=ThisWorkbook.Worksheets(1)
引数「Before」にマクロ実行ブック1枚目のワークシート「ThisWorkbook.Worksheets(1)」を指定して、先頭(一番左)にワークシートを追加しています。末尾にシートを追加するサンプルコード
'末尾(一番右)に追加
Dim shCnt As Long
shCnt = ThisWorkbook.Worksheets.Count
Worksheets.Add After:=ThisWorkbook.Worksheets(shCnt)
まず、マクロ実行ブックにあるワークシートの数を「Coun」プロパティで取得、変数「shCnt」に定義します。これで、変数「shCnt」を使って末尾のワークシート「ThisWorkbook.Worksheets(shCnt)」を取得することができます。最後に、引数「After」に末尾のワークシートを指定すれば、末尾(一番右)にワークシートを追加することができます。
任意のシートの前にシートを追加するサンプルコード
'任意のシートの前(左)に追加
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("サンプル")
Worksheets.Add Before:=trgtSh
まず、「サンプル」シートを変数「trgtSh」に定義します。つづいて、引数「Before」に「trgtSh」を指定することで任意のシート「サンプル」の前(左)に新規シートを追加しています。任意のシートの後ろにシートを追加するサンプルコード
'任意のシートの後ろ(右)に追加
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("サンプル")
Worksheets.Add After:=trgtSh
まず、「サンプル」シートを変数「trgtSh」に定義します。つづいて、引数「After」に「trgtSh」を指定することで任意のシート「サンプル」の後ろ(右)に新規シートを追加しています。Worksheets.Addを使う際のポイント
追加シートの名前を変える
新規でシートを追加すると、自動的に「Sheet〇」という名前がつきます。ただ実務では、追加シートを任意の名前に変えたいことがほとんどです。そこで、追加シートの名前を変える方法を2つ紹介します。
- シート追加直後に「ActiveSheet」の名前を変える
- 追加シートを変数に定義して名前を変える
シート追加直後に「ActiveSheet」の名前を変える
これまで紹介してきたように、「Worksheets.Add」で追加されたシートは追加直後「Active」となります。この性質を利用して、「Worksheet.Add」直後にシートの名前を変えられる「Name」プロパティを使用し「ActiveSheet.Name」とすることで、追加したシートの名前を変更することができます。
'作業シートの前(左)側に追加
Worksheets.Add
'「ActiveSheet」となっている追加シートの名前を変更
ActiveSheet.Name = "追加シート"
追加シートを変数に定義して名前を変える
追加シートの名前を変更するだけで処理が終わる場合は、すでに紹介した「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 = "追加シート
引数「Count」はなるべく使わない
「Worksheets.Add」実行時、引数「Count」を指定すると、一度に複数のシートが追加できますが、注意しなければならないことがあります。「Count」を指定すると、次の画像のように最後に追加された1枚のシートだけが「ActiveSheet」となるため、それまでに追加されたシートの特定が難しくなります。
以上の理由から、引数「Count」は使わないようにしましょう。もし一度に複数のシートを追加して、各シート名を変えたい場面があれば「For」ループなどを使用して、1枚ずつ処理していく方法をとりましょう。
シートを追加するAddメソッドまとめ
今回はVBAで「Add」メソッドを使って、任意の位置にシートを追加する方法について紹介しました。紹介した「Add」メソッドでのシート追加例
また、あわせて紹介した「追加シートの名前を変える」『引数「Count」はなるべく使わない』というポイントも覚えておきましょう。- 先頭にシートを追加する
- 末尾にシートを追加する
- 任意のシートの前にシートを追加する
- 任意のシートの後ろにシートを追加する
シート追加は使う場面も多く、汎用性も高い処理なので、ぜひ使いこなしてみてください。