ITサポーターTsuchida

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

ワークシートの削除は、最終的に見せたい結果のワークシートだけ残して、途中の経過のワークシートを消したい場合に使います。 ワークシートの挿入やコピーに比べると使用頻度は少ないです。