セルの入力値をクリアする方法は主に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」を使います。
前段と重複しますが、あらためて使い方を記載すると次のとおりです。
Sheets(“シート名”).Range(“A1”).ClearContents
Sheets(“シート名”).Range(“A1:D5”).ClearContents
空白の書き込みでクリア
そして、もうひとつの方法がセルに「””」(空白)を書き込む方法です。
こちらは単純に文字列のように書き込むだけなので、次のような形です。例示するまでもないでしょうか。
Sheets(“シート名”).Range(“A1”).Value = “”
Sheets(“シート名”).Range(“A1;D5”) = “”
(参考)「.Value」は省略してもValue扱いになります。
セル値のコピーでクリア(おまけ)
ついでに、セルのコピーによる値のクリア方法を記載しておきます。
これも仕組みというか、考え方は「空白の入力」と同じです。
空白セルのコピー(値のコピー)は次のように記載します。
コピー元のセルはすべて空白だという前提です。
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つ。
Sheets(“シート名”).Range(“C4:D5”).ClearContents
→ 結合セルの範囲指定が不足している。(正:C4:D6)
Sheets(“シート名”).Range(“C4:D6”).MergeArea.ClearContents
→ MergeAreaを使う場合は結合セルの左上のセル番地(C4)のみを指定する。
エラーにはならないものの、値をクリアできない例
Sheets(“シート名”).Range(“C5:D6″)=””
→ 結合セルの左上のセル番地(C4)が含まれていない。
ここからは正常動作する例を2つ。
Sheets(“シート名”).Range(“B2:E9”).ClearContents
→ 結合セルより広い範囲指定であれば、結合セルとまったく同じ範囲でなくても処理できる。
Sheets(“シート名”).Range(“B2:D5″)=””
→ この形ならどのように範囲指定してもエラーにはならない。ただし、結合セルの左上のセルが含まれていないと結合セルの値はクリアできない。
まとめ
お気付きとは思いますが、「入力値のクリア」という意味ではClearContentsを使う必要って意外とありません。
値をクリアする正攻法ではありますが、エラー対策を考えると「ClearContents」より「空白の書き込み」のほうがシンプルで対応の幅が広いことがわかると思います。
むしろ、[Rangeオブジェクト=””]というスタイルで書いておけば、たとえ結合セルの範囲とRnage指定する範囲がぴったり合っていなくてもエラーを出さずに処理できます。
それでいて特にデメリットも存在しません。
値のコピーも考え方は同じです。
以上、参考になれば幸いです
コメント
コメント一覧 (2件)
I am no longer certain the place you are getting your info, but good topic.
I must spend some time finding out more or understanding more.
Thank you for magnificent information I used to be looking for this info for my mission.
If you want to get much from this piece of writing then you have
to apply these strategies to your won website.