シートのデータを削除したい場面はよく出てくると思います。しかし削除の仕方がいろいろあってどの方法を使ったら良いか迷うことがあります。そこで削除方法の紹介とそれぞれの特徴について解説していきたいと思います。
事前準備
前提条件としてマクロを実行する際のシートと、実際に削除をするシートが別のシートであることとします。
実行するシートを「実行」、削除対象のシートを「クリア」とします。
事前準備として以下のプロシージャを作ります。
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
デリートキーのようなイメージですので、書式設定や行と列の幅設定などはそのままで、データのみが削除されます。
データは削除したいけど書式はそのままにしておきたい場合はこちらが便利です。
.Clear(データと書式設定削除)
.ClearContentsでは罫線や塗りつぶしなど書式設定が残ってしまいましたが、それも削除する場合はこちらを使います。
Sub シートクリア()
Dim tsh As Worksheet: Set tsh = Sheets("クリア")
tsh.Cells.Clear
End Sub
データだけではなく、書式設定まで消えましたが、行と列の幅はそのまま残っています。
行列のサイズは変えずデータと書式設定を削除したい場合はこちらが便利です。
.Delete(すべて削除)
Sub シートクリア()
Dim tsh As Worksheet: Set tsh = Sheets("クリア")
tsh.Cells.Delete
End Sub
イメージとしてはすべての行を選択して行全体を削除したような消し方です。
なので非表示になっている行も列も消えますし、書式設定も塗りつぶしもすべて消えます。行列の幅高さ設定も解除されます。
しかし一つ弱点が、オートフィルターがかかっていると…
フィルターによって非表示になっていた部分だけ残ってしまいました。
このデータが残ってしまう現象を回避するため、フィルターを全表示させます。
ShowAllDataはフィルターがかかっていると全表示しますが、フィルターがかかっていないとエラーになってしまいます。そのため一旦エラー無視モードにします。
Sub シートクリア()
Dim tsh As Worksheet: Set tsh = Sheets("クリア")
On Error Resume Next 'エラー無視モード
tsh.ShowAllData 'フィルターで非表示になっている行があったら全表示する
On Error GoTo 0 'エラー無視モード解除
tsh.Cells.Delete
End Sub
これで完全に初期化することができました。
そのほかにもクリアしたい内容によっていろいろコマンドがありますが、代表的なものはこの辺りがあれば十分ではないかと思います。私はこれ以外使うことはほとんどありません。
クリアしたいレベルに合わせて使い分けてください。
コメント