エクセルVBAでデータの削除消去のために使うメソッドに、DeleteメソッドとClearメソッドがあります。これらは似て非なるもの同士です。
使い分けが必要になりますので、是非覚えておきましょう。
こんにちは じゅんぱ店長 (@junpa33) です。
Excel VBAを実務で利用しているときに、” このデータを消したい ” っていう時が必ずありますよね。
セルのデータであったり、データ行全部であったり、表全体であったり、シート自体であったり、
事によったら、エクセルファイルそのものであったりするでしょう。
今回の話は、” 消したい ” を行う「 Delete と Clear 」というメソッドについてです。
コンテンツ
削除とクリアの違い
エクセルVBAで、「データを消す」ために利用するコードとしては、
「 Delete」か「Clear 」というメソッドになります。
「データが消去される」という最後の到達点は同じでも、それぞれに機能が違いますので使い分けが必要です。
VBAの用語的にも、データを削除するという時は、「Delete」を使って、
データをクリア・消去とかいう時は「Clear」を使うのが一般的です。
言うなれば、使い分け的には
ノートの白紙ページに書いた似顔絵を、消しゴムで消すのが「Clear」で、書いたページ自体を破いて捨ててしまうのが「Delete」ということになります。
DeleteとClearの使い分けを対象別に説明
DeleteとClearの使い分けを知るのは、実際に実行時の動作を見るのが早わかりです。
使うサンプルはこのデータ表です。
セルのデータを消す場合
セルB5を消します。
- Deleteメソッドでは、『セルD5そのものを削除』しますので、空っぽになったD5セル位置が、上詰めで元D6セル以下のセルで埋められます。
- Clearメソッドでは、『セルD5の値(データ)がクリア』されます。D5セルの値は空の状態になります。
Deleteメソッドを使う
Sub Deleteサンプル1()
Range("B5").Delete
End Sub
Clearメソッドを使う
Sub Clearサンプル1()
Range("B5").Clear
End Sub
行のデータを消す場合
セルD5の行を消します。
- Deleteメソッドでは、『セルD5のある行そのものを削除』しますので、空っぽになったD5セルの行位置が、上詰めで元D6セル以下のセルの行で埋められます。
- Clearメソッドでは、『セルD5の行にあるセルの値(データ)がクリア』されます。D5セルのある行のセルの値は空の状態になります。
Deleteメソッドを使う
Sub Deleteサンプル2()
Range("B5").EntireRow.Delete
End Sub
Clearメソッドを使う
Sub Clearサンプル2()
Range("B5").EntireRow.Clear
End Sub
シートのデータを消す場合
セルD5のあるシート(Sheet1)を消します。
- Deleteメソッドでは、Sheet1そのものが削除されてしまいました。
- Clearメソッドでは、Sheet1のセルにあった値全てクリアされました。
Deleteメソッドを使う
Sub Deleteサンプル3()
Worksheets("Sheet1").Delete
End Sub
Clearメソッドを使う
Sub Clearサンプル3()
Worksheets("Sheet1").Cells.Clear
End Sub
Deleteメソッド使用時の注意点
Deleteを実行するときには、エクセルが警告メッセージを発します。
このメッセージの表示でVBAコードの進行がSTOPしてしまいますので、停止させたくない場合はVBAコード中にメッセージ非表示コードを記述することが必要です。
Sub Deleteサンプル3()
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True
End Sub
警告を出すプログラム実行コード前に「Application.DisplayAlerts = False」
実行後には「Application.DisplayAlerts = True」で元に戻しておきます。
Clearメソッド使用時の注意点
ClearメソッドはRangeオブジェクトに対して実行されますので、
シートの全データについて行う場合は、シートのすべてのセルに対してという
「Worksheets(“Sheet1”).Cells」の記述方法を取ります。
DeleteとClearメソッドそれぞれの使い方
DeleteとClearメソッドの使い方を説明します。
Clearメソッド
ClearメソッドはRangeオブジェクトに対して行います。
セルをクリアするといっても、「全て」、「コメント」、「値と数式」「書式」など目的によって「色々な種類のClear」があります。
詳しくは別記事で特集していますので参考にしてください。
シートクリアーを目的のメソッド別にVBA最速理解Deleteメソッド
Deleteの使い方について
- オブジェクト.Delete [ Shift : = 定数 ] [ ]は省略可能
削除後にセルを移動させる方向を「Shift」引数で指定します。
Shift引数の定数 | 内容 |
---|---|
xlShiftToLeft | 左方向へシフトする |
xlShiftUp | 上方向へシフトする |
Shift引数を省略しても、エクセルが自動でシフト方向を判断して実行します。
Sub Deleteサンプル4_1()
Range("C5:C6").Delete
End Sub
セルC5とC6を削除します。
Shift引数省略した場合、このケースではエクセルが自動で「左方向にシフト」の判断をしました。
Sub Deleteサンプル4_2()
Range("C5:C6").Delete shift:=xlShiftUp
End Sub
Shift引数を上方向に指定しました。
Shift方向に意味を持たせる場合はShift引数を指定するようにしましょう。
DeleteとClearの使い分けのまとめ
結果として同じようにデータを消す、この2つのDeleteとClearメソッドですが、その消去方法は全く異なります。
選択を間違えれば、意図しない結果になることもあるでしょう。
Deleteメソッド、Clearメソッドを使用する場合は、先に処理対象のデータを別にコピーしておくことが必要かもしれません。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。