【VBA】指定したシート以外のシートをすべて削除する

ループ処理で1つずつシート名を比較し削除

繰り返し処理の中で、1つずつ「処理中のワークシート名」と「指定したシート名」を比較し、名前が違う時に削除処理をおこないます。

コード

 

解説

繰り返し処理(For Each)の中で、targetSheet.Name(処理しているシートの名前)と”5月の成績表”を比較して、異なる時そのシートを削除しています。

処理がすべて終わると、”5月の成績表”以外のシートはすべて削除されます。

実際にプログラムを自分で作る時は、この”5月の成績表”を変更してください。

注意すること

ブックの中に、削除から除外するシートがない(例だと”5月の成績表”シートがブックにない)と、すべてのシートを削除することになります。

すると、プログラムを実行するとブックに1つもシートがない状態になってしまうので、エラーが発生してしまいます。

 

複数のシートを除外したい時

複数のシートを除外したい時は、除外したいシートの数だけANDで条件をつなげていきます。

コード

 

解説

8行目のIf文の意味は「シート名が5月の成績表でない、かつシート名が6月の成績表でない時」となります。

結果として、”5月の成績表”と”6月の成績表”以外のシートは削除されます。

ただし、除外したいシートがもっと増えた時、ANDとtargetSheet.Nameが増えてコードが長くなり見にくくなります。
実際に「Ifで複数指定」のコードを見てください。3つのシートを除外しています。

 

より見やすいソースに

サンプルソースのようにIf文で条件を追加していくと、除外するシートが増えるた時、プログラムが長く見にくくなってしまいます。

修正前:Ifを使ったソース

 

このような時は、Select Caseを使うと見やすくシンプルになります。

修正後:Select Caseを使ったソース

Select Caseを使い慣れていないと難しく感じるかもしれませんが、コードがシンプルになるので使ってみてください。

その他テクニックは、次の記事を参考にしてください。

https://excel-toshokan.com/vba-sheet-delete/

関連記事

VBAテクニック辞典
成果を出す5つのポイント
VBAテクニック辞典
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました