OfficeType

VBA~ワークシートを消去しよう~Excel

ワークシートを消去する時はWorksheet.Deleteメソッドを使います。

基本

Worksheets("シート名").Deleteを実行すると"このシートは完全に消去されます。続けますか?"というメッセージが表示されるので、"はい"をクリックするとSheet1が消去されます。

Sub test1()
Worksheets("Sheet1").Delete
End Sub

image-01

image-02

image-03

メッセージ回避

コードを実行するたびにメッセージが表示されるのが煩わしい場合は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

image-04

image-05

シートが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

image-06

image-07

エラー回避(指定したシートがない場合とシートが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