目次
Add
今回は、ワークシートを新規作成するマクロを作成してみたいと思います。
「Worksheets」オブジェクトの「Add」メソッドを使用するとワークシートの新規作成を行えるようです。
マクロの一例
下記のマクロを作成してみました。「Worksheets」オブジェクトの「Add」メソッドを使用して新規ワークシートを作成しています。
Sub ワークシートを新規作成するマクロ()
Worksheets.Add
End Sub
上記マクロを以下の画像の状態で実行してみます。マクロ実行前は「Sheet1」「Sheet2」「Sheet3」が存在しています。
上記マクロを実行してみると以下の画像の結果になりました。
「Sheet4」という名前のワークシートが作成されています。シート「3」まで存在していたので、シート「4」という連番の名前が自動的に生成されたようです。
Sheets
「Worksheets」オブジェクトとの違いがよくわかりませんが、「Sheets」オブジェクトでもワークシートの新規作成を行えるようです。
下記マクロを一例目のマクロに続けて実行してみます。
Sub Sheetsオブジェクト使用_ワークシートを新規作成するマクロ()
Sheets.Add
End Sub
上記のマクロを実行してみると、以下の画像の結果になりました。「Sheet5」が作成されています。
名前を変更
次は新規作成したワークシートの名前を変更してみたいと思います。まずは準備としてワークシートを作成してみます。下記マクロを続けて実行してみます。
Sub ワークシートを新規作成するマクロ2()
Worksheets.Add
End Sub
上記マクロを実行すると、「Sheet6」が作成されました。
この時のアクティブなワークシートの名前を文字列として取得してみます。下記マクロを続けて実行してみます。
Sub アクティブなワークシートの名前を取得するマクロ()
MsgBox ActiveSheet.Name
End Sub
上記マクロを実行すると、メッセージダイアログに「Sheet6」と表示されました。ワークシート新規作成直後は、作成したワークシートがアクティブになっているようです。
アクティブなワークシート「Sheet6」の名前を「A」に変更してみたいと思います。下記マクロを続けて実行してみます。
Sub アクティブなワークシートの名前を変更するマクロ()
ActiveSheet.Name = "A"
End Sub
上記マクロを実行すると、アクティブなワークシート「Sheet6」の名前が「A」に変更されました。
変数に代入
「Add」メソッドを実行すると、戻り値として新規作成したワークシートのオブジェクトが返ってくるようなので、変数に代入して使用してみたいと思います。
下記マクロを続けて実行してみます。
Sub 新規作成したワークシートを変数に代入して使用するマクロ()
Dim a As Worksheet 'データ型を Worksheet にしておくと変数 a を利用する際に a. と入力する事で、 Worksheet オブジェクトで使用可能なプロパティ、メソッドの入力候補が表示されるので便利です。
Set a = Worksheets.Add '新規作成したワークシートがオブジェクトとして格納される
a.Name = "B"
End Sub
上記マクロを実行すると、ワークシートが新規作成されて、名前が「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」が追加されました。
上記マクロでは、「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」が追加されました。
「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」が追加されました。
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」が追加されました。
エラー発生
エラーが発生するマクロも試してみました。
]既に存在している同名のワークシートを作成しようとした場合、ワークシート名に使用出来ない文字を使おうとした場合はエラーが発生するようです。
下記マクロを続けて実行してみます。
Sub 同名ワークシートを作成しようとしてエラーになるマクロ()
Dim a As Worksheet
Set a = Worksheets.Add
a.Name = "G" '既に存在している
End Sub
上記マクロを実行してみると、エラーが発生しましたが、「Sheet6」が作成されました。
下記マクロを続けて実行してみます。
Sub ワークシート名に使用出来ない文字を使用してエラーになるマクロ()
Dim a As Worksheet
Set a = Worksheets.Add
a.Name = "yyyy/mm/dd" 'スラッシュ( / )を使用している
End Sub
上記マクロを実行してみると、エラーが発生しましたが、「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 キー)で実行してみます。
ステップインで「End Sub」の行まで実行してみると、 VBE のローカルウィンドウに以下の内容が表示されました。変数 a と b は同じ内容になっていますね。
今度は、ワークブックにグラフシートを追加して、「Graph1」「Sheet1」「Sheet2」「Sheet3」が存在している状態で、上記マクロをステップイン(F8 キー)で実行してみます。
ステップインで「End Sub」の行まで実行してみると、 VBE のローカルウィンドウの内容は以下のようになりました。変数 a と b の内容に違いがあるようです。 b にはグラフシートが含まれています。
以上、閲覧ありがとうございました。