VBA Stepup3
第3章 ワークシートの操作
VBAを使って特定のワークシートのデータを読みながら、処理結果を新しいワークシートに出力することはよくあります。元のデータを変更しないためにも、新しいワークシートはよく使います。
ワークシートを作成には、新しいワークシートを挿入する方法と、雛型のワークシートを用意し雛型のワークシートをコピーする2つの方法があります。
ワークシートの挿入
新規ワークシートを挿入する場合は、以下のとおりです。
Worksheets.Add
この指定だけでは、現在アクティブになっているブックの中の、アクティブになっているワークシートの前に新規ワークシートが挿入されます。 ワークシート挿入時に、ワークシート名を「新しいシート」と設定する場合は以下のとおりです。
Worksheets.Add
ActiveSheet.Name = "新しいシート"
一般的にワークシート名は、データに対応した名前や日付など、名前がダブらないように工夫します。
Setステートメントで変数にセットすることもできます。
Dim ws As Worksheet
Set ws = Worksheets.Add
ws.Name = "新しいシート"
複数のワークシートの挿入では、データの順番に挿入し名前を設定していくと、ワークシートの並びが逆になる可能性があります(省略すると後に挿入したものが手前になるので)。ワークシートを後ろに挿入するには、オプションとしてAfterを指定します。よく使われる最後のシートに追加するサンプルを紹介します。
Dim ws As Worksheet
Set ws = Worksheets.Add After:=Sheets(Sheets.Count)
ワークシートのコピー
ワークシートのコピーを使えば、コピー元のワークシートをコピー先の位置を指定して挿入ができます。あらかじめ作りたい表イメージがあって、見出し行のある表を、雛型のワークシートにしておきます。
ワークシートSheet1をSheet2の後ろにコピーして、シート名を「コピーシート」にする場合は以下のとおりです。
Worksheets("Sheet1").Copy after:=Worksheets("Sheet2")
ActiveSheet.Name = "コピーシート"
ワークシートをコピーする際は、コピー元のシート名とコピー先のシート名を規則性を持たせるようにします。例えば、日付や時間、ワークシートの中のデータをシート名に使うなどといった規則性です。
ワークシートの挿入では、挿入したワークシートをSetステートメントで変数にセットできましたが、ワークシートのコピーでは、コピー後のワークシートをSetステートメントで変数にセットできません。ただ、コピー後のワークシートは必ずアクティブシートになるため、アクティブシートをSetステートメントで変数にセットします。
Dim ws As Worksheet
Worksheets("Sheet1").Copy after:=Worksheets("Sheet2")
Set ws = ActiveSheet
ws.Name = "コピーシート"
なお、ワークシートSheet1を最後のワークシートの後ろにコピーする場合は以下のとおりです。
Worksheets("Sheet1").Copy
after:=Worksheets(Worksheets.Count)
ブック内のワークシート数は、Worksheets.Countで調べられますので、最後のワークシートの次にコピーされます。 コピーをシートの前に行うには、afterの代わりにbeforeを使います。
ワークシートシートの削除
ワークシートの削除は、削除するワークシートの名前を指定して、削除するだけです。
シート名がSheet1のワークシートを削除する場合は以下のとおりです。
Worksheets("Sheet1").Delete
ただし、VBAでワークシートを削除しようとすると、確認メッセージが表示されます。確認メッセージに応えるまではVBAが中断したままになります。 ワークシートの削除で、VBAを中断したくない場合には、ワークシートの削除の手前で、確認メッセージを非表示にします。
Application.DisplayAlerts = False
ワークシートの削除が終わったら、確認メッセージの表示に戻します。一連の流れは以下の通りとなります。
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True
ワークシートの削除は、最終的に見せたい結果のワークシートだけ残して、途中の経過のワークシートを消したい場合に使います。 ワークシートの挿入やコピーに比べると使用頻度は少ないです。