目次

Add

今回は、ワークシート新規作成するマクロを作成してみたいと思います。

「Worksheets」オブジェクトの「Add」メソッドを使用するとワークシートの新規作成を行えるようです。

ワークシートが作成されている。
ワークシートが作成されている。

目次まで戻る

マクロの一例

下記のマクロを作成してみました。「Worksheets」オブジェクトの「Add」メソッドを使用して新規ワークシートを作成しています。

Sub ワークシートを新規作成するマクロ()
Worksheets.Add
End Sub

上記マクロを以下の画像の状態で実行してみます。マクロ実行前は「Sheet1」「Sheet2」「Sheet3」が存在しています。

マクロ実行前は Sheet1 ~ 3 が存在している。
マクロ実行前は Sheet1 ~ 3 が存在している。

上記マクロを実行してみると以下の画像の結果になりました。

「Sheet4」という名前のワークシートが作成されています。シート「3」まで存在していたので、シート「4」という連番の名前が自動的に生成されたようです。

「Sheet4」が作成されている。
「Sheet4」が作成されている。

目次まで戻る

Sheets

「Worksheets」オブジェクトとの違いがよくわかりませんが、「Sheets」オブジェクトでもワークシートの新規作成を行えるようです。

下記マクロを一例目のマクロに続けて実行してみます。

Sub Sheetsオブジェクト使用_ワークシートを新規作成するマクロ()
Sheets.Add
End Sub

上記のマクロを実行してみると、以下の画像の結果になりました。「Sheet5」が作成されています。

「Sheets.Add」の記述でワークシートが作成されている。
「Sheets.Add」の記述でワークシートが作成されている。

目次まで戻る

名前を変更

次は新規作成したワークシートの名前を変更してみたいと思います。まずは準備としてワークシートを作成してみます。下記マクロを続けて実行してみます。

Sub ワークシートを新規作成するマクロ2()
Worksheets.Add
End Sub

上記マクロを実行すると、「Sheet6」が作成されました。

「Sheet6」が作成されている。
「Sheet6」が作成されている。

この時のアクティブなワークシートの名前を文字列として取得してみます。下記マクロを続けて実行してみます。

Sub アクティブなワークシートの名前を取得するマクロ()
MsgBox ActiveSheet.Name
End Sub

上記マクロを実行すると、メッセージダイアログに「Sheet6」と表示されました。ワークシート新規作成直後は、作成したワークシートがアクティブになっているようです。

アクティブなワークシートは「Sheet6」になっている。
アクティブなワークシートは「Sheet6」になっている。

アクティブなワークシート「Sheet6」の名前を「A」に変更してみたいと思います。下記マクロを続けて実行してみます。

Sub アクティブなワークシートの名前を変更するマクロ()
ActiveSheet.Name = "A"
End Sub

上記マクロを実行すると、アクティブなワークシート「Sheet6」の名前が「A」に変更されました。

名前が「A」に変更されている。
名前が「A」に変更されている。

目次まで戻る

変数に代入

「Add」メソッドを実行すると、戻り値として新規作成したワークシートのオブジェクトが返ってくるようなので、変数に代入して使用してみたいと思います。

下記マクロを続けて実行してみます。

Sub 新規作成したワークシートを変数に代入して使用するマクロ()
Dim a As Worksheet 'データ型を Worksheet にしておくと変数 a を利用する際に a. と入力する事で、 Worksheet オブジェクトで使用可能なプロパティ、メソッドの入力候補が表示されるので便利です。
Set a = Worksheets.Add '新規作成したワークシートがオブジェクトとして格納される
a.Name = "B"
End Sub

上記マクロを実行すると、ワークシートが新規作成されて、名前が「B」に変更されました。

名前が「B」に変更されている。
名前が「B」に変更されている。

目次まで戻る

after

最後尾のワークシートの後ろにワークシートを新規追加するマクロも作成してみました。

Add メソッドの「after」パラメーターにワークシートのオブジェクトを指定すると、その後ろにワークシートを追加してくれるようです。

下記マクロを続けて実行してみます。

Sub 最後尾のワークシートの後に新規ワークシートを追加するマクロ()

'ワークシートの総数
Dim a As Long
a = Worksheets.Count
MsgBox a

'最後尾のワークシートをオブジェクトとして取得
Dim b As Worksheet
Set b = Worksheets(a)

'最後尾のワークシートの後にワークシートを新規作成
Dim c As Worksheet
Set c = Worksheets.Add(after:=b)

'名前変更
c.Name = "C"

End Sub

上記マクロを実行すると、メッセージダイアログに「7」と表示されました。最後尾のワークシートは 7 番目にあるようです。

ワークシートの総数。
ワークシートの総数。

最後尾 7 番目のワークシート「Sheet3」の後ろにワークシート「C」が追加されました。

ワークシート「C」が追加されている。
ワークシート「C」が追加されている。

上記マクロでは、「after:=Worksheets(何番目)」でワークシートの指定を行いましたが、ワークシート名でも指定可能なようです。

「after:=Worksheets("C")」として、ワークシート「C」の後ろにワークシート「D」を追加してみます。下記マクロを続けて実行してみます。

Sub ワークシートCの後にワークシートDを追加するマクロ()
Dim a As Worksheet
Set a = Worksheets.Add(after:=Worksheets("C"))
a.Name = "D"
End Sub

上記マクロを実行すると、ワークシート「C」の後ろにワークシート「D」が追加されました。

ワークシート「C」の後ろにワークシート「D」が追加されている。
ワークシート「C」の後ろにワークシート「D」が追加されている。

「Worksheets.Count」を使用せず、何番目かの数字を直接指定する場合も試してみました。

2 番目のワークシート「A」の後ろにワークシート「E」を追加してみます。下記マクロを続けて実行してみます。

Sub 二番目のワークシートAの後にワークシートEを追加するマクロ()
Dim a As Worksheet
Set a = Worksheets.Add(after:=Worksheets(2))
a.Name = "E"
End Sub

上記マクロを実行すると、ワークシート「A」の後ろにワークシート「E」が追加されました。

ワークシート「E」が追加されている。
ワークシート「E」が追加されている。

目次まで戻る

before

「before」パラメーターを指定すると、指定ワークシートの前にワークシートを追加出来るようです。下記マクロを続けて実行してみます。

Sub ワークシートBの前にワークシートFとGを追加するマクロ()

Dim a As Worksheet

Set a = Worksheets.Add(before:=Worksheets(1)) '「B」の前
a.Name = "F"

Set a = Worksheets.Add(before:=Worksheets("B")) '「B」の前
a.Name = "G"

End Sub

上記マクロをマクロを実行してみると、ワークシート「B」の前にワークシート「F」「G」が追加されました。

ワークシート「B」の前にワークシート「F」「G」が追加されている。
ワークシート「B」の前にワークシート「F」「G」が追加されている。

目次まで戻る

エラー発生

エラーが発生するマクロも試してみました。

]既に存在している同名のワークシートを作成しようとした場合、ワークシート名に使用出来ない文字を使おうとした場合はエラーが発生するようです。

下記マクロを続けて実行してみます。

Sub 同名ワークシートを作成しようとしてエラーになるマクロ()
Dim a As Worksheet
Set a = Worksheets.Add
a.Name = "G" '既に存在している
End Sub

上記マクロを実行してみると、エラーが発生しましたが、「Sheet6」が作成されました。

実行時エラー'1004'
シートの名前をほかのシート、 VisualBasic で参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。
実行時エラー'1004' シートの名前をほかのシート、 VisualBasic で参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。
「Sheet6」は作成されている。
「Sheet6」は作成されている。

下記マクロを続けて実行してみます。

Sub ワークシート名に使用出来ない文字を使用してエラーになるマクロ()
Dim a As Worksheet
Set a = Worksheets.Add
a.Name = "yyyy/mm/dd" 'スラッシュ( / )を使用している
End Sub

上記マクロを実行してみると、エラーが発生しましたが、「Sheet7」が作成されました。

実行時エラー'1004'
シートまたはグラフの名前が正しくありません。次のいずれかを行ってください。
入力した名前が 31 文字以内であることを確認します。
入力した名前に次の文字が含まれていないことを確認します。
コロン(:)、円記号(\)、スラッシュ(/)、疑問符(?)、アスタリスク(*)、左角かっこ([)、右角かっこ(])。
名前が空白でないことを確認します。
実行時エラー'1004' シートまたはグラフの名前が正しくありません。次のいずれかを行ってください。 入力した名前が 31 文字以内であることを確認します。 入力した名前に次の文字が含まれていないことを確認します。 コロン(:)、円記号(\)、スラッシュ(/)、疑問符(?)、アスタリスク(*)、左角かっこ([)、右角かっこ(])。 名前が空白でないことを確認します。
「Sheet7」は作成されている。
「Sheet7」は作成されている。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

目次まで戻る

あとがき

Worksheets オブジェクトと Sheets オブジェクトの比較として以下のマクロを作成してみました。

Sub WorksheetsオブジェクトとSheetsオブジェクトを比較()

Dim a
Set a = Worksheets

Dim b
Set b = Sheets

End Sub

上記マクロを「Sheet1」「Sheet2」「Sheet3」が存在する状態でステップイン(F8 キー)で実行してみます。

ワークブックに「Sheet1」「Sheet2」「Sheet3」が存在している。
ワークブックに「Sheet1」「Sheet2」「Sheet3」が存在している。

ステップインで「End Sub」の行まで実行してみると、 VBE のローカルウィンドウに以下の内容が表示されました。変数 a と b は同じ内容になっていますね。

VBE(VisualBasicEditor) のローカルウィンドウの画面です。
VBE(VisualBasicEditor) のローカルウィンドウの画面です。

今度は、ワークブックにグラフシートを追加して、「Graph1」「Sheet1」「Sheet2」「Sheet3」が存在している状態で、上記マクロをステップイン(F8 キー)で実行してみます。

ワークブックに「Graph1」「Sheet1」「Sheet2」「Sheet3」が存在している。
ワークブックに「Graph1」「Sheet1」「Sheet2」「Sheet3」が存在している。

ステップインで「End Sub」の行まで実行してみると、 VBE のローカルウィンドウの内容は以下のようになりました。変数 a と b の内容に違いがあるようです。 b にはグラフシートが含まれています。

変数 a と b に違いがある。 b には「Graph」が含まれている。
変数 a と b に違いがある。 b には「Graph」が含まれている。

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿