【VBA】VBAでセルの入力値をクリアする方法と注意点

セルの入力値をクリアする方法は主に2種類あります。

基本はClearメソッドを使う方法で、もうひとつは対象のセルに””(空白)を書き込む方法です。

今回はこの2点について紹介するとともに、若干の注意点を添えて解説します。

なお、これらは当然ながらセルそのものを削除するわけではありません。

このページでは「入力値のクリア」に絞って記載しているため、セルそのものを削除してしまうDeleteメソッドは別の機会に取り上げます。

目次

Clearメソッドの紹介

まずはClearメソッドについてさらっとご紹介します。

種類削除対象
Clear対象セルに付随する全ての要素
(値、書式設定、コメントなどすべて)
ClearContents値と数式のみ
ClearFormats書式設定 (色、罫線、入力規則、条件付き書式など)
ClearOutline行・列のアウトライングループの解除
ClearComments
ClearNotes
コメント
ClearHyperlinksハイパーリンク

たくさんの種類がありますが、Clearメソッドの中でも入力値をクリアできるのは2つだけで、具体的には「Clear」と「ClearContents」です

「Clear」は入力値に限らずセルに付随するあらゆる要素を一括でクリアしてしまうので、使うときは少し注意する必要があります。

一方、「ClearContents」はセルの値(文字列と数式)だけをクリアします。ちょうどキーボードのDeleteキーを押したときの動作と同じです。

つまり今回紹介するのは入力値のみをクリアできる「ClearContents」となります。

ついでに、Clearメソッドの使い方も簡単に紹介しておきます。

(参考)記載例

Sheets(“シート名”).Range(“A1:D5”).Clear

Sheets(“シート名”).Range(“A1:D5”).ClearContents

Sheets(“シート名”).Range(“A1:D5”).ClearFormats

Sheets(“シート名”).Range(“A1:D5”).ClearOutline

Sheets(“シート名”).Range(“A1:D5”).ClearComments

Sheets(“シート名”).Range(“A1:D5”).ClearNotes

Sheets(“シート名”)..Range(“A1:D5”).ClearHyperlinks

このように、処理対象を指定するRangeオブジェクトの後ろに「.」(ドット)でつなぐだけです。

Clearメソッドにはややこしい引数が一切なく、使い方はとてもシンプルです。

Sub Clear()
'実際に使うときは必要なものだけを記載
    Sheets("シート名").Range("A1:D5").Clear
    Sheets("シート名").Range("A1:D5").ClearContents
    Sheets("シート名").Range("A1:D5").ClearFormats
    Sheets("シート名").Range("A1:D5").ClearOutline
    Sheets("シート名").Range("A1:D5").ClearComments
    Sheets("シート名").Range("A1:D5").ClearNotes
    Sheets("シート名").Range("A1:D5").ClearHyperlinks
End Sub

セルの入力値のクリアについて

セルの入力値をクリアする方法を紹介します。

Clearメソッドでクリア

まずは前段で触れたClearメソッドを使う方法です。

繰り返しになりますが、Clearメソッドの中でも入力値をクリアできるのは「Clear」と「ClearContents」だけで、書式設定などをあえて削除したい場合を除き、入力値のクリアに特化した「ClearContents」を使います

前段と重複しますが、あらためて使い方を記載すると次のとおりです。

入力値のみクリア:ClearContents

Sheets(“シート名”).Range(“A1”).ClearContents

Sheets(“シート名”).Range(“A1:D5”).ClearContents

空白の書き込みでクリア

そして、もうひとつの方法がセルに「””」(空白)を書き込む方法です。

こちらは単純に文字列のように書き込むだけなので、次のような形です。例示するまでもないでしょうか。

セルに空白を書き込む

Sheets(“シート名”).Range(“A1”).Value = “”

Sheets(“シート名”).Range(“A1;D5”) = “”

(参考)「.Value」は省略してもValue扱いになります。

セル値のコピーでクリア(おまけ)

ついでに、セルのコピーによる値のクリア方法を記載しておきます。

これも仕組みというか、考え方は「空白の入力」と同じです。

空白セルのコピー(値のコピー)は次のように記載します。

コピー元のセルはすべて空白だという前提です。

セル値のコピー:Z1セルが空白だとして

Sheets(“シート名”).Range(“B2:E9”).Value = Sheets(“シート名”).Range(“Z1”).Value

Sheets(“シート名”).Range(“B2:E9”) = Sheets(“シート名”).Range(“Z1”)

(参考)「.Value」は省略してもValue扱いになります。

Sub Clear()
'Z1の値をB2:E9へコピー
    Sheets("シート名").Range("B2:E9") = Sheets("シート名").Range("Z1")
End Sub

B2~E9セルにZ1セルの値を上書きします。

Z1セルが空白であればB2~E9は空白が入力され、入力値はクリアされます。

また、値のコピーであれば「.Value」を省略できます。

じつはこのコピーによる初期化は、クリアというよりセルに何らかの初期値を入力している場合に役立ちます

例えばこのように、販売数欄にあらかじめ単位が入力されていた場合、完全にクリアすると空欄になってしまいます。

そこで、図のように適当な列(図ではE列)に初期値(単位など)を入力しておき、次のコードを実行します。

Sub Clear()
'E4:E9の値をC4:C9へコピー
    Sheets("シート名").Range("C4:C9") = Sheets("シート名").Range("E4:E9")
End Sub

販売数の欄に入力がされていたとしても、このコードを実行するたび、E4:E9の値がC4:C9へコピーされて、上の図の状態に戻すことができます。

なお、この例のように同じ範囲の値をそっくりそのままコピーする場合は、コピー範囲と貼付範囲の大きさがまったく同じになるように注意してください、

結合セル指定時の注意点

注意点としては、主に結合セルの指定、つまりRangeオブジェクトの書き方です。

例えば次のように、一部がセル結合された表があったとします。

C4~D6が結合されています

このような結合セルに対して、次のコードを実行するとエラーが出ます。

Sheets(“シート名”).Range(“C4”).ClearContents

正しくは次のように指定します。

Sheets(“シート名”).Range(“C4:D6”).ClearContents

Sheets(“シート名”).Range(“C4”).MergeArea.ClearContents

Sheets(“シート名”).Range(“C4″)=””

Sheets(“シート名”).Range(“C4:D6″)=””

複数記載していますが、どれも同じ結果になります。

このように、結合セルに対して処理を行うときはエラーが出ないように書き方を注意する必要があります。

もう少しバリエーションを持たせて例をあげておきます。

ますはエラーになる例を2つ。

エラーになる指定例1

Sheets(“シート名”).Range(“C4:D5”).ClearContents

→ 結合セルの範囲指定が不足している。(正:C4:D6)

エラーになる指定例2

Sheets(“シート名”).Range(“C4:D6”).MergeArea.ClearContents

→ MergeAreaを使う場合は結合セルの左上のセル番地(C4)のみを指定する。

エラーにはならないものの、値をクリアできない例

値をクリアできない指定例

Sheets(“シート名”).Range(“C5:D6″)=””

→ 結合セルの左上のセル番地(C4)が含まれていない。

ここからは正常動作する例を2つ。

正常作動する指定例1

Sheets(“シート名”).Range(“B2:E9”).ClearContents

→ 結合セルより広い範囲指定であれば、結合セルとまったく同じ範囲でなくても処理できる。

正常作動する指定例2

Sheets(“シート名”).Range(“B2:D5″)=””

→ この形ならどのように範囲指定してもエラーにはならない。ただし、結合セルの左上のセルが含まれていないと結合セルの値はクリアできない。

まとめ

お気付きとは思いますが、「入力値のクリア」という意味ではClearContentsを使う必要って意外とありません。

値をクリアする正攻法ではありますが、エラー対策を考えると「ClearContents」より「空白の書き込み」のほうがシンプルで対応の幅が広いことがわかると思います。

むしろ、[Rangeオブジェクト=””]というスタイルで書いておけば、たとえ結合セルの範囲とRnage指定する範囲がぴったり合っていなくてもエラーを出さずに処理できます。

それでいて特にデメリットも存在しません。

値のコピーも考え方は同じです。

以上、参考になれば幸いです

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次