シートの存在をチェックしてからシートを作成・削除・コピーする

VBAアプリケーションを作っていると、不要になったシートを削除したり、隠しテンプレートシートをコピーして新たなシートを作成したりなど,シートの作成・削除の場面が出てきます。

その際,存在しないシートを削除したり,すでにあるシートと同じ名前のシートを作成したりすると,エラーとなってしまいます。今まではその都度シートがあるかないか確認するコードを書いていましたが,よく使うことに気づいたので,効率化のため関数を作成しました。

(※ アクセス数の多いページなので、最新バージョンのExcelでも確認して更新しました。初出2014/07/27 更新2017/12/19)

はじめに

何をする関数か

指定した名前のシート名が存在するか否かを確認する関数です。

引数・戻り値

引数

SName:存在を確認するシート名を文字列で渡します。

戻り値

SheetDetect:シートがあった場合True、なかった場合Falseを返します。

動作確認状況

Excel 32ビット 64ビット
2007 OK
2010 たぶんOK(未確認) たぶんOK(未確認)
2011 Mac OK
2013 OK たぶんOK(未確認)
2016 OK たぶんOK(未確認)
2016 Mac OK

2007, 2013の32ビットでしか動作確認していませんが、Win32APIを用いていないので、おそらく64ビットでもそのまま動くでしょう。

追記:MacのExcel 2011でも動作確認しました。

追記:Win, MacのExcel 2016でも動作確認しました。

作成方法

いずれかの標準モジュールに以下のコードでパブリック関数を追加します。

使用例

主な使用例としては、シートを追加する前にすでに同じ名前があるか確認したり、シートを削除する前にそのシートが本当にあるか確認したりします。

おわりに

プロシージャの進行によってはシートの有無が自明な場合は不要かもしれませんが、なるべく汎用性を持たせてエラーを発生させないようにするためには、この関数によってシートの有無を確認してから次の作業へ移ることが有効です。

関連記事