Excel VBAでセルの値だけを消したいとき、何となく Clear を使うと、罫線や背景色まで消えて困ることがあります。逆に、シートを完全に初期化したい場面では ClearContents だけでは足りません。
値や数式だけを消すなら ClearContents、値も書式もまとめて消すなら Clear、書式だけ消すなら ClearFormats を使いましょう。 行や列そのものを詰めて削除したい場合だけ Delete を使用します。
この記事では、VBAでセルをクリアする基本コード、Clear と ClearContents の違い、範囲・シート全体・表データをクリアする実務例、よくある失敗をまとめます。
【 この記事の概要 】
| よく使う度 | |
| 難しさ | |
| 覚えておくと安心度 |
VBAでセルの値をクリアする基本コード|ClearContentsで値のみ削除
書式を残して、セルの値や数式だけを消したい場合は ClearContents を使います。
まずはこのコードだけ覚えておきましょう。
Sub ClearValuesOnly()
Worksheets("Sheet1").Range("B2:F7").ClearContents
End Subこの例では、Sheet1の B2:F7 に入っている値や数式をクリアします。
セルの背景色、罫線、表示形式、条件付き書式は残るため、入力テンプレートを使い回したいときに向いています。

ClearContents は値や数式だけを消し、セルの見た目は残します。
入力欄を空にして再利用したいときの基本です。
| やりたいこと | 使うコード | 残るもの |
|---|---|---|
| 値や数式だけ消す | Range("B2:F7").ClearContents | 書式、罫線、背景色、条件付き書式 |
| シート全体の値だけ消す | Worksheets("Sheet1").Cells.ClearContents | シートの見た目、列幅、行高 |
| 選択範囲の値だけ消す | Selection.ClearContents | 選択範囲の書式 |
ClearContentsの1行を分解する
ClearContents は「中身をクリアする」という意味です。
公式ドキュメントでも、範囲内の数式と値をクリアし、セルの書式と条件付き書式は残ると説明されています。
| 部分 | 意味 |
|---|---|
Worksheets("Sheet1") | 対象のシートを指定します。シート名は自分のブックに合わせて変更します。 |
Range("B2:F7") | クリアしたいセル範囲です。1セルだけなら Range("B2") と書きます。 |
ClearContents | 指定範囲の値や数式を消します。書式は残ります。 |
範囲を変えたいときの書き換え例と使い分け
セルをクリアするコードを使う場合は、以下のような範囲指定を行うことで、柔軟に対応することができます。
| 目的 | コード例 |
|---|---|
| A1だけ値を消す | Worksheets("Sheet1").Range("A1").ClearContents |
| B列の値を消す | Worksheets("Sheet1").Columns("B").ClearContents |
| 2行目から10行目を消す | Worksheets("Sheet1").Rows("2:10").ClearContents |
| シート全体の値を消す | Worksheets("Sheet1").Cells.ClearContents |
Range・Cells・Selectionの使い分け
セルをクリアするコードでは、対象範囲の指定方法も重要です。
以下のように Range、Cells、CurrentRegion、Selection は、それぞれ向いている場面が違います。
| 指定方法 | 使う場面 | コード例 | 注意点 |
|---|---|---|---|
Range | 範囲が決まっている | Range("B2:F7").ClearContents | 一番読みやすく、初心者向けです。 |
Cells | 行番号・列番号で指定したい | Cells(2, 3).ClearContents | 列番号を変数で扱う処理に向いています。 |
Rows / Columns | 行や列をまとめて対象にしたい | Columns("B").ClearContents | 列全体を消すため、見出しまで含めるか確認します。 |
CurrentRegion | 表の範囲を自動取得したい | Range("B2").CurrentRegion.ClearContents | 空白行・空白列で範囲が途切れます。 |
Selection | 手動で選んだ範囲を処理したい | Selection.ClearContents | 選択ミスがあるため、自動処理では避けるのが無難です。 |
記事に貼るコードや業務用マクロでは、できるだけ Worksheets("Sheet1").Range("B2:F7") のように、シート名と範囲をセットで書くと安全です。

VBAのClear・ClearContents・ClearFormats・Deleteの違い
VBAでセルをクリアするときは、「値を消す」のか「書式も消す」のか「セルそのものを詰める」のかで使うメソッドが変わります。迷ったら、次の表で選んでください。
| メソッド名 | 説明 |
|---|---|
| Clear | セルの内容とフォーマットを、すべてクリアします。 |
| ClearContents | セルのデータのみをクリアし、フォーマットはそのままにします。 |
| ClearFormats | セルのフォーマットのみをクリアし、データはそのままにします。 |
| ClearNotes | セル内のコメントやメモをクリアします。 |
| ClearHyperlinks | セルに設定されたハイパーリンクをクリアしますが、 内容やフォーマットはそのままにします。 |
| ClearOutline | セルに設定されたアウトライン(グループ化)をクリアします。 |
| Delete | セルそのものを削除し、周囲のセルを上または左へ詰めます。 |
Clearは値も書式もまとめてクリアする
Clearメソッドは、セルの内容と書式を一度にクリアします。
これは、セルを完全にリセットしたいときに非常に便利です。
Range("B2:F7").Clearこの例では、セル「B2」から「F7」までの範囲をクリアします。
すべての内容とフォーマットが削除され、セルはデフォルトの状態に戻ります。
※行や列の幅は変更されたままとなります。

ClearContentsは値や数式だけをクリアする
ClearContentsメソッドは、セルの値や数式のみをクリアし、書式・罫線・背景色はそのまま残します。
入力欄だけを空にして、表の見た目を残したい場合に使います。
Range("B2:F7").ClearContentsこの例では、セル「B2」から「F7」までのデータをクリアしますが、フォーマットはそのまま残ります。
データだけをクリアしたいときに使います。

その他のメソッド
ClearFormatsメソッド (セルのフォーマットをクリア)
ClearFormatsメソッドは、セルのフォーマットのみをクリアし、データはそのままにします。
これは、データの内容を保持しつつ、書式をリセットしたいときに使用します。
Range("B2:F7").ClearFormatsこの例では、セル「B2」から「F7」までのフォーマットをクリアし、データはそのままにしておきます。
書式設定をリセットして、デフォルトの見た目に戻したい場合に便利です。

ClearNotesメソッド (セルのメモ・コメントをクリア)
ClearNotesメソッドは、セル内のメモやコメントをクリアします。
データやフォーマットには影響を与えず、注釈だけを削除したい場合に便利です。
Range("B2:F7").ClearNotesこの例では、セル「B2」から「F7」までの範囲にあるすべてのコメントやメモをクリアします。
データとフォーマットはそのまま残ります。

ClearHyperlinksメソッド (セルのハイパーリンクをクリア)
ClearHyperlinksメソッドは、セルに設定されたハイパーリンクをクリアします。
内容やフォーマットはそのままにして、リンクだけを削除したい場合に使います。
Range("B2:F7").ClearHyperlinksこの例では、セル「B2」から「F7」までの範囲にあるハイパーリンクをクリアします。
リンクをリセットする場合に便利です。
しかし、青文字と下線はそのまま残ります。
元の状態に戻す場合は、個別でフォントを変更する必要があります。

ClearOutlineメソッド (セルのアウトラインをクリア)
ClearOutlineメソッドは、指定されたセル範囲に設定されたアウトライン(グループ化や階層構造)1を解除するために使用します。
このメソッドを使うと、グループ化された状態が解除され、元の行や列の配置に戻りますが、セルの内容や書式はそのまま保持されます。
※アウトラインとは、Excelで行や列をグループ化して折りたたんだり展開したりできる機能です。 ↩︎
Range("B2:F7").ClearOutlineこのコードを実行すると、セル「B2」から「F7」に設定されているアウトラインが解除されます。
データ・フォーマットは変更されません。

ClearとDeleteは別物として考える
Clear はセルの中身や書式を消すだけで、セルの位置は動きません。Delete はセルそのものを削除し、周囲のセルを上または左へ詰めます。
Sub DeleteCellsAndShiftUp()
Worksheets("Sheet1").Range("B2:F7").Delete Shift:=xlUp
End Sub表の形を保ったまま中身だけ消したいなら Delete は使いません。
行や列が詰まるため、周囲のデータ位置がずれる可能性があります。
VBAで範囲・シートを値のみクリアする実務例をご紹介
ここからは、実務でそのまま使いやすい形にしたコード例です。
どの例も、対象シート名とセル範囲を自分のブックに合わせて変更してください。
使用例1 : シート全体をクリアする
まず、シート全体を対象にするときの違いを押さえておきます。
入力テンプレートを残したいなら Cells.ClearContents、シートをほぼ初期状態に戻したいなら Cells.Clear です。
'// 値だけ消す場合
Sub ClearWholeSheetValuesOnly()
Worksheets("Sheet1").Cells.ClearContents
End Sub'// 書式まで消す場合
Sub ClearWholeSheetAll()
Worksheets("Sheet1").Cells.Clear
End Sub
シート全体を対象にする場合は、値だけクリアするのか、書式までクリアするのかを先に決めます。
範囲指定より影響が大きいため、実行前の確認が重要です。
使用例2 : 複数の入力欄をまとめて値のみクリアする
請求書、集計表、チェック表などで、離れた入力欄だけを空にしたい場合は、範囲をカンマで区切って指定します。
Sub ClearInputCells()
With Worksheets("入力")
.Range("B3:B12,D3:D12,F3").ClearContents
End With
End SubRange("B3:B12,D3:D12,F3") の部分を変えると、複数の入力欄を一度にクリアできます。
書式を残したい入力フォームでは ClearContents が安全です。
Sub ClearInputCellsWithConfirm()
If MsgBox("入力欄の値をクリアします。よろしいですか?", _
vbYesNo + vbQuestion) = vbNo Then Exit Sub
Worksheets("入力").Range("B3:B12,D3:D12,F3").ClearContents
End Subボタンに割り当てるマクロでは、実行前に MsgBox で確認を入れると、誤操作を減らせます。

使用例3 : CurrentRegionで表のデータ部分だけクリアする
表の行数や列数が毎回変わる場合は、CurrentRegion で表全体を取得し、Offset と Resize で見出し行を除外します。
Sub ClearTableBody()
Dim ws As Worksheet
Dim targetRange As Range
Set ws = Worksheets("Sheet1")
Set targetRange = ws.Range("B2").CurrentRegion
If targetRange.Rows.Count <= 1 Then Exit Sub
targetRange.Offset(1, 0) _
.Resize(targetRange.Rows.Count - 1, targetRange.Columns.Count) _
.ClearContents
End Sub
CurrentRegion は空白行・空白列で囲まれた範囲をまとめて取得します。
表の途中に完全な空白行や空白列があると範囲が分かれるため、表の形を確認してから使ってください。
使用例4 : 最終行までのデータをまとめてクリアする
「2行目から最終行まで値のみクリアしたい」場合は、最終行を取得してから範囲を作ります。
データ行だけを初期化したいときに便利です。
Sub ClearDataToLastRow()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
If lastRow < 2 Then Exit Sub
ws.Range("B2:F" & lastRow).ClearContents
End Subこの例では、B列を基準に最終行を調べ、B2:F最終行 の値や数式をクリアします。
A列が必ず入力される表なら、"B" を "A" に変更してください。
VBAのクリア処理でよくあるミス・FAQとまとめ
セルのクリア処理は短いコードで書けますが、消す対象を間違えると復旧に時間がかかります。
よくあるミスを先に確認しておきましょう。
よくあるミスと対策
| ミス | 原因 | 対策 |
|---|---|---|
| 罫線や背景色まで消えた | Clear を使った | 値だけ消したい場合は ClearContents を使う |
| 行や列が詰まった | Delete を使った | 表の形を残すなら Clear または ClearContents を使う |
| 別のシートを消した | アクティブシート前提で Range を使った | Worksheets("Sheet1").Range(...) のように対象を明示する |
| 表の一部しか消えない | CurrentRegion が空白行・空白列で途切れた | 表内の完全な空白行や空白列をなくすか、範囲を直接指定する |
| 実行後に元に戻せない | マクロ実行後は手動操作の戻るが効かないことが多い | 事前にブックを保存する、確認メッセージを入れる |
シートクリア・範囲クリアでよくある質問
まとめ
- 値や数式だけを消すなら
ClearContentsを使う
ClearContentsメソッドの使用方法 をもう一度見る - 値も書式もまとめて消すなら
Clearを使う
Clearメソッドの使用方法 をもう一度見る - 書式だけ消すなら
ClearFormatsを使う
ClearFormatsメソッドの使用方法 をもう一度見る - 行や列を詰めたい場合だけ
Deleteを使う
DeleteはClearとどう違うか?の解説 をもう一度見る - 実務では、対象シートと対象範囲を明示してからクリアする
実務の使用例 をもう一度見る
まずは ClearContents を基本にして、「書式も消す必要があるか」「行列を詰める必要があるか」を考えると、クリア処理の選び間違いを減らせます。
自宅でじっくり学びたい方へ
ClearContentsの使い方が分かったら、次はRange・Cells・繰り返し処理などを順番に整理しておくと、 実務でVBAを使うときに迷いにくくなります。
※リンク先の記事には、Udemy講座などの広告リンクが含まれます。



