【Excel VBA】指定した名前のシートが存在していた場合削除する(For Eachステートメント)

Excel VBA講座 開講中!

今回は、Excel VBAで、指定した名前のシートが存在していた場合は削除する、という方法をご紹介します。

※本ページはプロモーションが含まれています

スポンサーリンク
スポンサーリンク

For Eachステートメントとは?

シートの削除についてご紹介する前に、先にFor Eachステートメントについてご紹介します。

For Eachステートメントとは、配列やコレクションなどで全ての要素を順に取り出して処理を行うときに使われるステートメントです。

Dim配列やコレクションの各要素を繰り返す変数名 As Variant(またはオブジェクト型)

For Each配列やコレクションの各要素を繰り返す変数名 In配列やコレクションなどの名称

繰り返す処理内容

Next配列やコレクションの各要素を繰り返す変数名

のように記述します。

配列やコレクションの各要素を繰り返す変数名には、オブジェクト型またはバリアント型を指定します。

指定した名前のシートが存在していた場合削除する

下記のサンプル1は、「テスト2」という名前のシートが存在していた場合は削除するというプログラムです。

まず、

For Each ws In Worksheets
If ws.Name = “テスト2” Then flag = True
Next ws

でブック内の全てのシートを順に取り出して参照し、「テスト2」という名前のシートがあった場合は変数flagにTrueを代入します。

If flag = True Then

Application.DisplayAlerts = False
Worksheets(“テスト2”).Delete
Application.DisplayAlerts = True

End If

で、変数flagがTrueだった場合には、シート削除の確認表示をいったん表示しないようにして「テスト2」のシートを削除し、確認表示を再度有効にしています。

・サンプル1

Sub シートが存在していた場合削除()

Dim ws As Worksheet
Dim flag As Boolean

‘「テスト2」シートが存在していた場合削除
For Each ws In Worksheets
If ws.Name = “テスト2” Then flag = True
Next ws
If flag = True Then

Application.DisplayAlerts = False
Worksheets(“テスト2”).Delete
Application.DisplayAlerts = True

End If

End Sub

タイトルとURLをコピーしました