目次

ワークシートを削除したい

今回は、ワークシート削除するマクロを試してみたいと思います。ワークシートの削除は「Worksheet」オブジェクトの「Delete」メソッドで行えるようです。

「Application.DisplayAlerts = False」と記述しておくと、ワークシート削除前の確認画面が表示されないのでループ処理で削除する場合は便利だと思います。

目次まで戻る

マクロの一例

下記画像のワークシート構成でマクロをスタートしてみます。「Sheet1」「Sheet2」「Sheet3」が存在しています。

初期状態です。
初期状態です。

「Sheet2」を削除するマクロを実行してみます。「Sub」の上に書いてある「'001」の数字は私の覚えで書いています。

'001
Sub Sheet2を削除する()
Worksheets("Sheet2").Delete
End Sub

上記マクロを実行してみると、削除確認のメッセージが表示されました。今回は「削除」を選択してみます。

選択したシートに、データが存在する可能性があります。データを完全に削除するには、「削除」をクリックしてください。
選択したシートに、データが存在する可能性があります。データを完全に削除するには、「削除」をクリックしてください。

「Sheet2」が削除されました。

「Sheet2」が削除されました。
「Sheet2」が削除されました。

目次まで戻る

DisplayAlerts = False

削除確認のメッセージを表示しない場合は、「Application.DisplayAlerts = False」と記述してから削除するようです。

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

'002
Sub Sheet3を削除する()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Worksheets("Sheet3").Delete
Application.DisplayAlerts = True
End Sub

削除確認のメッセージが表示されることなく、「Sheet3」が削除されました。

削除確認のメッセージが表示されることなく、シートが削除されました。
削除確認のメッセージが表示されることなく、シートが削除されました。

目次まで戻る

残り一枚

残り一枚となった「Sheet1」の削除を試みてみます。下記マクロを続けて実行してみます。

'003
Sub Sheet1を削除する()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True
End Sub

実行してみると、エラーが発生しました。ワークシートは一枚は必要なようです。手動で削除する時の条件と同じですね。

実行時エラー'1004' Worksheet クラスの Delete メソッドが失敗しました。
実行時エラー'1004' Worksheet クラスの Delete メソッドが失敗しました。

次のマクロのためにワークシートを追加しておきます。下記マクロを続けて実行してみます。

'004
Sub 新規ワークシートを3枚作成する()
Worksheets.Add Count:=3
End Sub

ワークシートが 3 枚追加されました。

複数シートを一括で作成しました。
複数シートを一括で作成しました。

目次まで戻る

配列で削除

Worksheets() の中に配列を指定して削除してみます。下記マクロを続けて実行してみます。

'005
Sub Sheet6とSheet5を一括削除()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Worksheets(Array("Sheet6", "Sheet5")).Delete '配列指定
Application.DisplayAlerts = True
End Sub

「Sheet6」「Sheet5」が削除されました。

配列で複数のシートを削除しました。
配列で複数のシートを削除しました。

目次まで戻る

何番目で指定

2 番目にある「Sheet1」を削除してみます。下記マクロを続けて実行してみます。

'006
Sub 二番目のワークシートSheet1を削除()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Worksheets(2).Delete '2 番目
Application.DisplayAlerts = True
End Sub

「Sheet1」が削除されました。

2 番目のシートが削除されました。
2 番目のシートが削除されました。

またしても次のマクロのためにワークシートを追加しておきます。下記マクロ続けて実行してみます。

'007
Sub 新規ワークシートを5枚作成する()
Worksheets.Add Count:=5
End Sub

新規ワークシートが 5 枚追加されました。

シートが 5 枚追加されました。
シートが 5 枚追加されました。

目次まで戻る

ループ処理で削除

ForEach ループで名前が「Sheet8」以外のワークシートを削除してみます。下記マクロを続けて実行してみます。

'008
Sub Sheet8以外をForEachループで削除する()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Dim a As Worksheet
For Each a In Worksheets
If a.Name <> "Sheet8" Then 'Sheet8 以外の場合
a.Delete
End If
Next
Application.DisplayAlerts = True
End Sub

「Sheet8」以外が削除されました。

一枚のシートだけを残して他のシートを削除しました。
一枚のシートだけを残して他のシートを削除しました。

もう一度、次のマクロのためにワークシートを追加しておきます。

'009
Sub 新規ワークシートを5枚作成する_2()
Worksheets.Add Count:=5
End Sub

ワークシートが 5 枚追加されました。

5 枚のシートが一括で作成されました。
5 枚のシートが一括で作成されました。

目次まで戻る

Like 演算子に一致を削除

名前が「Sheet1」から始まるワークシートを削除してみます。 Like 演算子を使用して一致判定を行っています。下記マクロを続けて実行してみます。

'010
Sub Like演算子でSheet1xに一致した場合削除する()
Application.DisplayAlerts = False '削除確認のメッセージ非表示
Dim a As Worksheet
For Each a In Worksheets
If a.Name Like "Sheet1*" Then '「Sheet1」から始まる名前の場合
a.Delete
End If
Next
Application.DisplayAlerts = True
End Sub

「Sheet16」~「Sheet12」が削除されました。

Like 演算子の条件に一致したシートが削除されました。
Like 演算子の条件に一致したシートが削除されました。

目次まで戻る

テスト環境

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

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

目次まで戻る

前後の投稿