ClearContents は「セルの“中身だけ”を消すための、とても安全な消しゴム」
まず一番大事なイメージから。
ClearContents は「セル(Range)の“中身だけ”を消すメソッドです。
中身=値・数式(Formula)
残るもの=書式(色・罫線・フォント・表示形式)、コメント など
つまり、
「入力されたデータだけ消したい」
「テンプレートの罫線や色は絶対に残したい」
というときに、真っ先に選ぶべきのが ClearContents です。
超初心者ほど、まずは Clear ではなく ClearContents を“標準装備”にしてほしいくらい、大事な存在です。
一番基本:指定した範囲の中身だけを消す
A2:C10 の中身だけを消す例
Sub SampleClearContentsBasic()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("A2:C10").ClearContents
End Sub
VBこのコードがやっていることは、とてもシンプルです。
「入力シートの A2:C10 に入っている値・数式だけを消す」
「セルの色・罫線・フォント・表示形式はそのまま残す」
つまり、「入力欄だけリセットして、レイアウトはそのまま」という動きです。
ここでの重要ポイントは、
Range(場所)
その上で ClearContents(中身だけ消す)
という“役割分担”を、頭の中でハッキリさせることです。
Clear と ClearContents の違いを、感覚レベルでつかむ
Clear は「全部」、ClearContents は「中身だけ」
同じ範囲に対して、Clear と ClearContents を比べてみます。
ws.Range("A2:C10").Clear ' 中身+書式+コメントなど、ほぼ全部消える
ws.Range("A2:C10").ClearContents ' 中身だけ消える(見た目は残る)
VBClear を使うと、
せっかく作った罫線やセルの色、表示形式(通貨・日付など)まで消えてしまいます。
一方 ClearContents は、
「入力された値・数式だけ」を消してくれるので、テンプレートを壊しません。
超初心者のうちは、
「とりあえず Clear ではなく ClearContents を使う」
と決めてしまっていいくらいです。
「どのシートの、どの範囲の中身を消すか」をきちんと書く
アクティブシート任せにしない書き方
いきなりこう書くこともできます。
Range("A2:C10").ClearContents
VBこれは「アクティブなシートの A2:C10 の中身を消す」という意味です。
一見楽ですが、「どのシートがアクティブか」によって対象が変わるので、事故の元です。
超初心者のうちから、あえてこう書く癖をつけてください。
ThisWorkbook.Worksheets("入力").Range("A2:C10").ClearContents
VBあるいは、変数を使って:
Sub SampleClearContentsWithVariables()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("入力")
ws.Range("A2:C10").ClearContents
End Sub
VB「どのブック → どのシート → どの範囲 → その中身を ClearContents」
という順番を崩さない書き方を身につけると、
“別のシートのデータを全部消してしまった”という悲劇をかなり防げます。
可変範囲(最終行までなど)の中身を ClearContents する
A 列の最終行まで、データだけ消す例
「A 列のデータがどこまであるか分からないけど、2 行目から最終行までの中身だけ消したい」
という、実務でよくあるパターンです。
Sub SampleClearContentsDynamic()
Dim ws As Worksheet
Dim lastRow As Long
Dim rng As Range
Set ws = ThisWorkbook.Worksheets("入力")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' A列の最終行を求める
Set rng = ws.Range("A2:C" & lastRow)
rng.ClearContents
End Sub
VB流れを言葉で整理すると、
A 列の一番下から上に向かってデータを探し、最終行を lastRow に入れる
A2 から C 最終行までを Range として握る
その範囲の中身だけ ClearContents で消す
という構造です。
ここでの重要ポイントは、
「消したい範囲を、まず Range としてきちんとつかまえる」
「その Range に対して ClearContents を呼ぶ」
という“二段構え”の考え方です。
これは、どんな処理を書くときにも役立つ基本パターンです。
ClearContents を使うときに意識してほしい重要ポイント
「何を残したいのか」を先に決める
Clear 系を使う前に、必ず自分に問いかけてください。
「罫線は残したい?」
「セルの色は残したい?」
「表示形式(通貨・日付など)は残したい?」
これらを残したいなら、答えは一択です。
Clear ではなく ClearContents を使います。
逆に、「この範囲は本当に全部まっさらにしていい」と確信できるときだけ、Clear を検討します。
ClearContents は「テンプレートを守るための標準装備」
実務でよくあるのは、
テンプレートのシートがあって
ボタンを押すと入力エリアだけリセットしたい
でも罫線や色、見出しは絶対に消したくない
というパターンです。
このときに Clear を使ってしまうと、テンプレートが壊れます。
ClearContents なら、中身だけきれいに消えて、テンプレートはそのままです。
「テンプレートを守りながらデータだけ消す」
この発想を持てるかどうかで、マクロの“優しさ”が変わります。
まとめ:ClearContents は「入力データだけをやさしく消すためのメソッド」
ClearContents の本質は、
「Range に対して、“値・数式などの中身だけ”を消し、書式やレイアウトは守る」
ことです。
押さえておきたいポイントをコンパクトにまとめると、
ClearContents は中身だけ、Clear は中身+書式など“ほぼ全部”
「どのブック → どのシート → どの範囲 → ClearContents」という順番を崩さない
最終行・最終列を求めてから Range を作り、その Range に ClearContents するのが定番パターン
テンプレートを壊したくないなら、まずは Clear ではなく ClearContents を“標準”にする
