VBA DeleteとClearの使い分け 削除とクリアの違いを最速理解

vbadeleteeyecatch

エクセルVBAでデータの削除消去のために使うメソッドに、DeleteメソッドとClearメソッドがあります。これらは似て非なるもの同士です。
使い分けが必要になりますので、是非覚えておきましょう。

こんにちは じゅんぱ店長 (@junpa33) です。

Excel VBAを事務で利用しているときに、” このデータを消したい ” っていう時が必ずありますよね。

セルのデータであったり、データ行全部であったり、表全体であったり、シート自体であったり、

事によったら、エクセルファイルそのものであったりするでしょう。

 

今回の話は、” 消したい ” を行う「 Delete と Clear 」というメソッドについてです。

削除とクリアの違い

 

エクセルVBAで、「データを消す」ために利用するコードとしては、

「 Delete」か「Clear 」というメソッドになります。

「データが消去される」という最後の到達点は同じでも、それぞれに機能が違いますので使い分けが必要です。

VBAの用語的にも、データを削除するという時は、「Delete」を使って、

データをクリアとかいう時は「Clear」を使うのが一般的です。

言うなれば、使い分け的には

ノートの白紙ページに書いた似顔絵を、消しゴムで消すのが「Clear」で、書いたページ自体を破いて捨ててしまうのが「Delete」ということになります。

 

DeleteとClearの使い分けを対象別に説明

 

DeleteとClearの使い分けを知るのは、実際に実行時の動作を見るのが早わかりです。

使うサンプルはこのデータ表です。

vbadeletep000

セルのデータを消す場合

セルB5を消します。

Deleteメソッドでは、『セルD5そのものを削除』しますので、空っぽになったD5セル位置が、上詰めで元D6セル以下のセルで埋められます。

Clearメソッドでは、『セルD5の値(データ)がクリア』されます。D5セルの値は空の状態になります。

Deleteメソッドを使う Clearメソッドを使う
コード
Sub Deleteサンプル1()
    Range("B5").Delete
End Sub
vbadeletep001
コード
Sub Clearサンプル1()
    Range("B5").Clear
End Sub
vbadeletep002

 

行のデータを消す場合

セルD5の行を消します。

Deleteメソッドでは、『セルD5のある行そのものを削除』しますので、空っぽになったD5セルの行位置が、上詰めで元D6セル以下のセルの行で埋められます。

Clearメソッドでは、『セルD5の行にあるセルの値(データ)がクリア』されます。D5セルのある行のセルの値は空の状態になります。

Deleteメソッドを使う Clearメソッドを使う
コード
Sub Deleteサンプル2()
    Range("B5").EntireRow.Delete
End Sub

vbadeletep003

コード
Sub Clearサンプル2()
    Range("B5").EntireRow.Clear
End Sub

vbadeletep004

 

シートのデータを消す場合

セルD5のあるシート(Sheet1)を消します。

Deleteメソッドでは、Sheet1そのものが削除されてしまいました。

Clearメソッドでは、Sheet1のセルにあった値全てクリアされました。

Deleteメソッドを使う Clearメソッドを使う
コード
Sub Deleteサンプル3()
  Worksheets("Sheet1").Delete
End Sub

vbadeletep005

コード
Sub Clearサンプル3()
  Worksheets("Sheet1").Cells.Clear
End Sub

vbadeletep006

Deleteメソッド使用時の注意点

 

Deleteを実行するときには、エクセルが警告メッセージを発します。

 

vbadeletep007

 

このメッセージの表示で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」があります。

詳しくは別記事で特集していますので参考にしてください。

vbacleareyecatch エクセルVBA シートのクリアーを目的のメソッド別に最速理解

 

Deleteメソッド

Deleteの使い方について

構文

  • オブジェクト.Delete [ Shift : = 定数 ] [ ]は省略可能

削除後にセルを移動させる方向を「Shift」引数で指定します。

Shift引数の定数 内容
xlShiftToLeft 左方向へシフトする
xlShiftUp 上方向へシフトする

Shift引数を省略しても、エクセルが自動でシフト方向を判断して実行します。

 

サンプル1 Shift引数を設定しない
コード
Sub Deleteサンプル4_1()
    Range("C5:C6").Delete
End Sub

vbadeletep008

セルC5とC6を削除します。

Shift引数省略した場合、このケースではエクセルが自動で「左方向にシフト」の判断をしました。

サンプル2 Shift引数を設定する
コード
Sub Deleteサンプル4_2()
    Range("C5:C6").Delete shift:=xlShiftUp
End Sub

vbadeletep009

Shift引数を上方向に指定しました。

Shift方向に意味を持たせる場合はShift引数を指定するようにしましょう。

 

DeleteとClearの使い分けのまとめ

 

結果として同じようにデータを消す、この2つのDeleteとClearメソッドですが、その消去方法は全く異なります。

選択を間違えれば、意図しない結果になることもあるでしょう。

Deleteメソッド、Clearメソッドを使用する場合は、先に処理対象のデータを別にコピーしておくことが必要かもしれません。

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。
Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

vbaborder1eyecatchVBAでセルに罫線を設定する 位置・線種・太さ・色vbarowseyecatchVBA Rowsプロパティの範囲選択と関連のメソッドvbadeleteeyecatchVBA DeleteとClearの使い分け 削除とクリアの違いを最速理解vbacurrentregioneyecatchCurrentRegionは範囲取得プロパティ 連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドは特定のセルを選択する多機能ツールVBAFunctioneyecatchFunctionプロシージャーの働きと使い方 ユーザー定義関数もここ知れOK!vbacalleyecatchCallステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解vbacharactereyecatchaCharactersプロパティで文字列中の一部の文字の書式設定や加工をするvbafontsyseyecatcha文字の書式の設定方法 Fontプロパティで装飾操作ができるVBAFormateyecatchFormat関数を書式設定のテッパン関数にする!実務での書式と重要5例vbaintfixeyecatch数値の整数部分を完全分離 Int・Fix・Abs・Sign関数で出来る使い方vbarndeyecatchRnd関数で乱数を取得。使えない戻り値を加工して利用度を上げるVBAコードvbaroundupdowneyecatchRoundUpとRoundDown関数の使い方。数値の切り方に注意が必要ですvbaroundeyecatchRound関数の毒針。VBAで数値を四捨五入する時の注意点vbamaxminaveeyecatchMax・Min・Averageワークシート関数で最大値・最小値・平均を求めるvbainsteeyecatchInstr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力vbareplaceeyecatchReplace関数は文字列を置換・削除する利用度の高い関数vbaselectcaseeyecatchSelect Case 条件分岐の使い方。ステートメントの基本はコレ。VBAValeyecatchVal関数の使い方はデータ型不一致の解決策。値を文字列型から数値型へVBAStringeyecatchString関数の使い方は文字を指定した数だけ並べることが出来る

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。