シートのデータを削除する Excel(エクセル)マクロ(VBA)

シートのデータを削除したい場面はよく出てくると思います。しかし削除の仕方がいろいろあってどの方法を使ったら良いか迷うことがあります。そこで削除方法の紹介とそれぞれの特徴について解説していきたいと思います。

事前準備

前提条件としてマクロを実行する際のシートと、実際に削除をするシートが別のシートであることとします。

実行するシートを「実行」、削除対象のシートを「クリア」とします。

実行シート
クリアシート

事前準備として以下のプロシージャを作ります。

Sub シートクリア()


    Dim tsh As Worksheet: Set tsh = Sheets("クリア") '「クリア」シートを「tsh」に格納

    'ここに削除コードを記載する

End Sub

.ClearContents(データのみ削除)

イメージはシートのセルをすべて選択してデリートキーを押したような消し方です。

Sub シートクリア()

    Dim tsh As Worksheet: Set tsh = Sheets("クリア")

    tsh.Cells.ClearContents

End Sub
ClearContents前
矢印
ClearContents後

デリートキーのようなイメージですので、書式設定や行と列の幅設定などはそのままで、データのみが削除されます。

データは削除したいけど書式はそのままにしておきたい場合はこちらが便利です。

.Clear(データと書式設定削除)

.ClearContentsでは罫線や塗りつぶしなど書式設定が残ってしまいましたが、それも削除する場合はこちらを使います。

Sub シートクリア()

    Dim tsh As Worksheet: Set tsh = Sheets("クリア")

    tsh.Cells.Clear

End Sub
Clear前
矢印
Clear後

データだけではなく、書式設定まで消えましたが、行と列の幅はそのまま残っています。

行列のサイズは変えずデータと書式設定を削除したい場合はこちらが便利です。

.Delete(すべて削除)

Sub シートクリア()

    Dim tsh As Worksheet: Set tsh = Sheets("クリア")

    tsh.Cells.Delete

End Sub
Delete前
3,4行目が非表示になっています
矢印
Delete後

イメージとしてはすべての行を選択して行全体を削除したような消し方です。

なので非表示になっている行も列も消えますし、書式設定も塗りつぶしもすべて消えます。行列の幅高さ設定も解除されます。

しかし一つ弱点が、オートフィルターがかかっていると…

Delete前2
3,4行目がソートがかかっています
矢印
Delete後2
3,4行目分のデータだけ残りました

フィルターによって非表示になっていた部分だけ残ってしまいました。

このデータが残ってしまう現象を回避するため、フィルターを全表示させます。

ShowAllDataはフィルターがかかっていると全表示しますが、フィルターがかかっていないとエラーになってしまいます。そのため一旦エラー無視モードにします。

Sub シートクリア()

    Dim tsh As Worksheet: Set tsh = Sheets("クリア")

    On Error Resume Next 'エラー無視モード
    tsh.ShowAllData 'フィルターで非表示になっている行があったら全表示する
    On Error GoTo 0 'エラー無視モード解除

    tsh.Cells.Delete

End Sub
Delete前3
3,4行目がフィルターがかかっています
矢印
Delete後3

これで完全に初期化することができました。

そのほかにもクリアしたい内容によっていろいろコマンドがありますが、代表的なものはこの辺りがあれば十分ではないかと思います。私はこれ以外使うことはほとんどありません。

クリアしたいレベルに合わせて使い分けてください。

コメント

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