Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » VBAで指定した名前のシートを削除するのは意外と面倒

VBAで指定した名前のシートを削除するのは意外と面倒

動作検証バージョン:Windows 11 Home + 64bit Excel(バージョン2307 ビルド16626.20000 クイック実行)

Excel VBAを使って、指定した名前(シート名)のシートを削除するのを、最近はちょっと面倒に感じています。

Worksheet.Deleteでシートを削除しようとすると……

シートの削除は、Worksheet.Deleteメソッドを使えば済むのですが、

以下のようなマクロでは、「新規シート」という名前のシートがない場合に、

Sub sample()
 Const TGT_SHT = "新規シート"
 Sheets(TGT_SHT).Delete
End Sub

「実行時エラー'9': インデックスが有効範囲にありません。」
実行時エラーが発生してしまいます。

[スポンサードリンク]

ですから、指定した名前のシートが存在しているのか事前にチェックしなければなりません。

また、いざWorksheet.Deleteメソッドで削除しようとすると
「このシートは完全に削除されます。続けますか?」
確認メッセージが表示されます。

この制御も必要です。

指定した名前のシートを削除するサンプルマクロ

以上のような点を考慮すると、最低でも以下のようなマクロにせざるを得ません。

Sub 指定した名前のシートを削除する()
 Const TGT_SHT = "新規シート"
  
 Dim sht As Worksheet
 For Each sht In Sheets
  If sht.Name = TGT_SHT Then
   Application.DisplayAlerts = False
   sht.Delete
   Application.DisplayAlerts = True
  End If
 Next
End Sub

For Each~Nextループで、順番にワークシートを取得して、

Dim sht As Worksheet
For Each sht In Sheets

Worksheet.Nameプロパティで取得できるシート名が、指定した名前だったときに、

If sht.Name = TGT_SHT Then

削除の確認メッセージが表示されないように設定変更を行ってから、

  Application.DisplayAlerts = False

削除を実行しています。

  sht.Delete

その後、確認メッセージが表示されるように設定変更を行っています。

  Application.DisplayAlerts = True

指定した名前のシートを削除して同じ名前のシートを作り直すサンプルマクロ

実務でありがちなのが、指定した名前のシートを削除して、同じ名前のシートを作り直すといった処理です。

その場合、以下のようなマクロでしょうか。

Sub 指定した名前のシートを削除する()
 Const TGT_SHT = "新規シート"
  
 Dim sht As Worksheet
 For Each sht In Sheets
  If sht.Name = TGT_SHT Then
   Application.DisplayAlerts = False
   sht.Delete
   Application.DisplayAlerts = True
  End If
 Next

 Sheets.Add Before:=Sheets(1)
 ActiveSheet.Name = TGT_SHT
End Sub

先ほどのマクロの最後に

Sheets.Add Before:=Sheets(1)
ActiveSheet.Name = TGT_SHT

先頭にワークシートを追加して、名前を変更する処理を追加しています。

最終更新日時:2023-07-07 14:38

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » VBAで指定した名前のシートを削除するのは意外と面倒

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.