PR

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

エクセルマクロ(VBA)

Excelで大量のデータを扱っていると、「このシートの内容、全部消したいんだけど…」と思うことありませんか?特に、定期的にデータを更新する作業では、前回のデータの削除は避けて通れません。

でも、手動で全セルを選択して削除するのは面倒ですよね。さらに、「データだけ消したい」「書式設定も消したい」「行ごと削除したい」など、状況によって要求も変わります。これらを効率的に、そして間違いなく行うにはどうすればいいのでしょうか?

私は20年近く、企業のExcel業務効率化を支援してきました。その経験から言えるのは、データ削除のような「単純だけど頻繁に行う作業」こそ、自動化の恩恵が大きいということです。適切なマクロを使えば、数分かかっていた作業が数秒で終わることも珍しくありません。

この記事では、ExcelのVBAを使ってシートのデータを効率的に削除する方法を以下の手順で解説します。

  1. 事前準備:マクロを使うための基本設定
  2. .ClearContents:データのみを削除する方法
  3. .Clear:データと書式設定を削除する方法
  4. .Delete:行や列ごと完全に削除する方法 それぞれについて、コピー&ペーストですぐに使えるコードも提供します。

マクロでシートデータを削除するスキルを身につけることで、得られるメリット:

  1. データ削除作業の時間を大幅に短縮できる
  2. 削除ミスによるデータ損失のリスクを減らせる
  3. 状況に応じた適切な削除方法を選択できるようになる
  4. マクロの基本的な使い方を学べ、他の作業にも応用できる

データ削除は単純な作業に見えて、実は多くの時間とリスクを含んでいます。
マクロを使えば、これらの問題を一挙に解決できます。
「マクロは難しそう」と思うかもしれませんが、この記事で紹介する方法は、プログラミング初心者でも簡単に使えるものばかりです。
ほんの少しの学習で、あなたのExcel作業が劇的に効率化されるかもしれません。
さあ、一緒にExcelマクロの世界への第一歩を踏み出しましょう!

シートそのものを削除する場合はシート名を指定してシートを削除する方法 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をコピーしました