不要なシートがどんどん増えていくと閲覧性も悪くなりますし、エクセル自体の動きも遅くなってしまいます。そのような場合はVBAを使って自動で不要なシートを削除することができます。今回はVBAを使って高速でシートを削除する方法をご紹介いたします。
シートの中身だけ削除したい場合はシートのデータを削除する Excel(エクセル)マクロ(VBA)を参照してください。
シート名を指定して削除する場合
まずは一番簡単にVBAの記述の中に直接削除したいシート名を記述する方法からご紹介いたします。
Sub sheetdel()
Sheets("削除シート").Delete 'tstshに格納したシートを削除する
End Sub
このVBAを実行すると
このようなアラートが表示されますので、「削除」をクリックすると
シートが削除されました。
アラートメッセージ(警告)が出ないように削除する場合
アラートメッセージ(警告)が出てもかまわない場合はこれでも良いのですが、アラートメッセージ(警告)を表示させない場合は「Application.DisplayAlerts」を「False」にすることでメッセージを表示させないようにすることができます。具体的な方法は以下の通りです。
Sub sheetdel()
Application.DisplayAlerts = False '以降の処理中にアラートを表示させない
Sheets("削除シート").Delete
Application.DisplayAlerts = True '以降の処理中にアラートを表示させる
End Sub
このVBAを実行すると
アラートも表示されず、一瞬でシートが削除されました。
シート名を指定して削除する場合
上記までの場合コードの中にシート名を直接書き込んでいるので後々のことを考えると非常にメンテナンス性が悪いです。そこでシート名を指定してシートを削除するコードに変更してみます。
シートの指定の仕方はたくさんありますが、今回はエクセルの「A1」セルに削除したいシート名を入力して、シート名がセルの値と同じシートを削除するコードにしてみます。
「Sheet1」シートの「A1」セルに削除したいシート名の「削除シート」と入力してみました。
Sub sheetdel()
Dim shname As String
Dim tgtsh As Worksheet
shname = Sheets("sheet1").Range("A1").Value '「A1」セルの内容をshnameに格納する
Set tstsh = Sheets(shname) '削除したいシートをtstshに格納する
Application.DisplayAlerts = False '以降の処理中にアラートを表示させない
tstsh.Delete 'tstshを削除する
Application.DisplayAlerts = True '以降の処理中にアラートを表示させる
End Sub
こちらのVBAを実行すると
このように一瞬で「削除シート」が消えました。
まとめ
今回はシート指定方法を「A1」セルに入力としましたが、シートを指定する方法は他にもたくさんあります。「A1」セルのように座標ではなくセル事態に名前を付けて紐付けするパターンもありますし、プルダウンから選択する方法や、メッセージボックスを使って都度指定する方法もあります。
またいずれの場合でも存在しないシート名を指定するとエラーが発生してしまいますが、エラーの回避方法についてはまた別記事でご紹介させていただきます。
いろいろな手段を組み合わせることでより便利な方法を見つけてください。
今回の記事が皆さんのお役に立てていただけたら幸いです。
コメント