PR

シート名を指定してシートを削除する方法 VBA(マクロ)Excel(エクセル)

シート削除 エクセルマクロ(VBA)
シート削除

不要なシートがどんどん増えていくと閲覧性も悪くなりますし、エクセル自体の動きも遅くなってしまいます。そのような場合は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

「Application.DisplayAlerts = False 」と「Application.DisplayAlerts = True」で挟んだ間の処理中はアラートを表示しないで実行することができます。この時処理の終わりに「Application.DisplayAlerts = True」を付けるのを忘れないようにしてください。この二つは必ずセットで使うようにしましょう。 そうしないとマクロが終わった後アラートが出ない状態だけ残ってしまいますので、手動で削除するときやエクセルを閉じるときにもアラートが表示されなくなってしまうので注意が必要です。

この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」セルのように座標ではなくセル事態に名前を付けて紐付けするパターンもありますし、プルダウンから選択する方法や、メッセージボックスを使って都度指定する方法もあります。

またいずれの場合でも存在しないシート名を指定するとエラーが発生してしまいますが、エラーの回避方法についてはまた別記事でご紹介させていただきます。

いろいろな手段を組み合わせることでより便利な方法を見つけてください。

今回の記事が皆さんのお役に立てていただけたら幸いです。

コメント

タイトルとURLをコピーしました