VBA~ワークシートを消去しよう~Excel
ワークシートを消去する時はWorksheet.Deleteメソッドを使います。
基本
Worksheets("シート名").Deleteを実行すると"このシートは完全に消去されます。続けますか?"というメッセージが表示されるので、"はい"をクリックするとSheet1が消去されます。
Sub test1() Worksheets("Sheet1").Delete End Sub
メッセージ回避
コードを実行するたびにメッセージが表示されるのが煩わしい場合はApplication.DisplayAlertsプロパティでメッセージを非表示にし、処理が止まらないようにします。シート消去のコードの前にApplication.DisplayAlerts = Falseをおくとメッセージが非表示になります。処理が終わったらApplication.DisplayAlerts = Trueをおきメッセージが表示の状態に必ず戻しましょう。
Sub test2() Application.DisplayAlerts = False Worksheets("Sheet1").Delete Application.DisplayAlerts = True End Sub
エラー回避(指定したシートがない場合)
指定したシートがない場合はメッセージを表示するようにするとエラーが回避できます。下のコードはallshというワークシートオブジェクトを格納する変数を宣言しFor Each allsh In Worksheetsですべてのワークシートを取得するまで一つずつ繰り返していきます。delshという変数に消去したいシート名を格納し繰り返しの構文の中でIf文の条件式にallsh.Name = delshで全てのワークシートの中に消去したいシートがあるか判断しています。シートがあればIfとEnd Ifの間に書かれたコードを実行するのでSheet1を消去しExit Subででコードが終了します。シートがない場合はIfとEnd Ifの間に書かれたコードは実行 しないのでExit Subは実行せずに最後に書かれているMsgBox "指定のシートは存在しません"を実行しシートが存在しないとメッセージを表示しコードが終了します。
Sub test3() Dim allsh As Worksheet Dim delsh As String delsh = "Sheet1" For Each allsh In Worksheets If allsh.Name = delsh Then Application.DisplayAlerts = False Worksheets(delsh).Delete Application.DisplayAlerts = True Exit Sub End If Next MsgBox "指定のシートは存在しません" End Sub
シートが1つしかない場合
シートが1つしかない場合は消去できないのでメッセージを表示するようにしましょう。下のコードはIf文の条件式にWorksheets.Count <> 1と書かれています。Worksheets.Countは一番右のシートのインデックス番号を取得するので番号が1以外であればシートが消去できるの<> 1で1でなければとしています。Worksheets.Countが1以外の時はシートを消去し、1の時はElseのコードに飛びシート1つしかないとメッセージを表示します。
Sub test4() If Worksheets.Count <> 1 Then Application.DisplayAlerts = False Worksheets("Sheet1").Delete Application.DisplayAlerts = True Else MsgBox "シートが1つしかないので消去できません" End If End Sub
エラー回避(指定したシートがない場合とシートが1つしかない場合の組み合わせ)
上の2つのエラー回避を組み合わせると下のコードになります。指定したシートがない場合と、シートが1つしかない場合のエラーを回避できます。
Sub test5() Dim allsh As Worksheet Dim delsh As String delsh = "Sheet1" For Each allsh In Worksheets If allsh.Name = delsh Then If Worksheets.Count <> 1 Then Application.DisplayAlerts = False Worksheets(delsh).Delete Application.DisplayAlerts = True Else MsgBox "シートが1つしかないので消去できません" End If Exit Sub End If Next MsgBox "指定のシートは存在しません" End Sub