ループ処理で1つずつシート名を比較し削除
繰り返し処理の中で、1つずつ「処理中のワークシート名」と「指定したシート名」を比較し、名前が違う時に削除処理をおこないます。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Dim targetSheet As Worksheet '繰り返し用 '警告メッセージを表示しない Application.DisplayAlerts = False '削除処理 For Each targetSheet In Worksheets If targetSheet.Name <> "5月の成績表" Then targetSheet.Delete End If Next '警告メッセージを表示 Application.DisplayAlerts = True |
解説
繰り返し処理(For Each)の中で、targetSheet.Name(処理しているシートの名前)と”5月の成績表”を比較して、異なる時そのシートを削除しています。
処理がすべて終わると、”5月の成績表”以外のシートはすべて削除されます。
実際にプログラムを自分で作る時は、この”5月の成績表”を変更してください。
POINT
シート名は、ダブルクォーテーションで囲みます。
シート名は、ダブルクォーテーションで囲みます。
注意すること
ブックの中に削除から除外するシートが元々ない(今回の例だと”5月の成績表”シートがない)と、すべてのシートを削除することになります。
すると、ブックには1つもシートがない状態になってしまうので、エラーが発生してしまいます。
ブックの中に削除から除外するシートが元々ない(今回の例だと”5月の成績表”シートがない)と、すべてのシートを削除することになります。
すると、ブックには1つもシートがない状態になってしまうので、エラーが発生してしまいます。
複数のシートを除外したい時
複数のシートを除外したい時は、除外したいシートの数だけANDで条件をつなげていきます。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Dim targetSheet As Worksheet '繰り返し用 '警告メッセージを表示しない Application.DisplayAlerts = False '削除処理 For Each targetSheet In Worksheets If targetSheet.Name <> "5月の成績表" And targetSheet.Name <> "6月の成績表" Then targetSheet.Delete End If Next '警告メッセージを表示 Application.DisplayAlerts = True |
解説
8行目のIf文の意味は「シート名が5月の成績表でない、かつシート名が6月の成績表でない時」となります。
結果として、”5月の成績表”と”6月の成績表”以外のシートは削除されます。
ただし、除外したいシートがもっと増えた時、ANDとtargetSheet.Nameが増えてコードが長くなり見にくくなります。
実際に「Ifで複数指定」のコードを見てください。3つのシートを除外しています。
Ifで複数指定
1 2 3 |
If targetSheet.Name <> "5月の成績表" And targetSheet.Name <> "6月の成績表" And targetSheet.Name <> "7月の成績表" Then targetSheet.Delete End If |
このような時は、Select Caseを使うと見やすくシンプルになります。
Select Caseで複数指定
1 2 3 4 5 6 7 8 |
Select Case targetSheet.Name Case "5月の成績表", "6月の成績表", "7月の成績表" '削除対象外なので、処理はなし Case Else '指定したシート以外なので削除 targetSheet.Delete End Select |
Select Caseを使い慣れていないと難しく感じるかもしれませんが、コードがシンプルになるので使ってみてください。
その他テクニックは、次の記事を参考にしてください。

【VBA】ワークシートの削除とテクニック
ワークシートを削除する時は、Deleteメソッドを使います。
削除するシートは、「シート名」や「インデックス(何番目)」で指定できます。
シート名で指定し削除
Worksheets("○○").Deleteと書き、○○の部...