目次
ワークシートを削除したい
今回は、ワークシートを削除するマクロを試してみたいと思います。ワークシートの削除は「Worksheet」オブジェクトの「Delete」メソッドで行えるようです。
「Application.DisplayAlerts = False」と記述しておくと、ワークシート削除前の確認画面が表示されないのでループ処理で削除する場合は便利だと思います。
マクロの一例
下記画像のワークシート構成でマクロをスタートしてみます。「Sheet1」「Sheet2」「Sheet3」が存在しています。
「Sheet2」を削除するマクロを実行してみます。「Sub」の上に書いてある「'001」の数字は私の覚えで書いています。
'001
Sub Sheet2を削除する()
Worksheets("Sheet2").Delete
End Sub
上記マクロを実行してみると、削除確認のメッセージが表示されました。今回は「削除」を選択してみます。
「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
実行してみると、エラーが発生しました。ワークシートは一枚は必要なようです。手動で削除する時の条件と同じですね。
次のマクロのためにワークシートを追加しておきます。下記マクロを続けて実行してみます。
'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」が削除されました。
またしても次のマクロのためにワークシートを追加しておきます。下記マクロ続けて実行してみます。
'007
Sub 新規ワークシートを5枚作成する()
Worksheets.Add Count:=5
End Sub
新規ワークシートが 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 枚追加されました。
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」が削除されました。
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。