【VBA】シートの初期化|ClearContentsで値のみ削除
作成日:2022-11-29
更新日:2025-10-05

Public Sub ClearSheet(Byval ws As Worksheet)
With ws
.Cells.ClearContents
End With
End Sub注意点:前処理が必ず必要

ClearContentsの前に、必ず
オートフィルタを解除し、非表示部分を表示する必要がある
組み合わせて使う
' Reset all filters, outlines, and hidden rows/columns|全フィルタ・グループ・非表示行列を解除
Public Function ResetFilterMode(ByVal ws As Worksheet)
On Error GoTo ErrHdl
With ws
' オートフィルタ解除
If .FilterMode Then .ShowAllData
' グループ展開(最大階層まで)
With .Outline
.ShowLevels ColumnLevels:=8, RowLevels:=8
End With
' 非表示解除
.Cells.EntireColumn.Hidden = False
.Cells.EntireRow.Hidden = False
End With
Exit Function
ErrHdl:
Call MsgError("ResetFilterMode") ' エラー発生時の識別用に関数名を渡すと良い
End Function
Public Sub ClearSheet(Byval ws As Worksheet)
With ws
.Cells.ClearContents
End With
End Sub
' 呼び出し側
Public Sub ClearAllData(ByVal ws As Worksheet)
Call ResetFilterMode(ws)
ws.Cells.ClearContents
End Sub“リセットせずに消す” は、危ない

なぜリセット?

見えてないセル”には ClearContents が効かないの
ClearContetnsの前に必ずフィルタ解除をする理由
.Cells.ClearContents の落とし穴
ClearContents は「見えてるセル」にしか実際の影響が出ない。
つまり、
- 行や列が非表示
- フィルタで隠れている
- グループで折りたたまれている
このどれかに当てはまるセルは、消したつもりでも中身が残る。
結果として:
- 「データが残ってて後で上書きミス」
- 「次の処理でゴミが混入」
というトラブルの温床になる。
ResetFilterMode の役割
「シートの見え方をリセットして、ClearContents がちゃんと全部に効く状態にする」
という「前処理(precondition)」の役割がある。
| ClearContents|セル内容の消去 |
| FilterMode|フィルタモード |
| Precondition|前提条件 |
| Hidden Cells|非表示セル |
| Safety Routine|安全処理ルーチン |
Always unhide
before you wipe.
before you wipe.
2022-11-29
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

[VBA]Horizontal Paste1D array 【VBA】一次元配列を横方向にシートに貼り付け【範囲をリサイズする】 -

[VBA]画像として貼り付けCopyPicture 【VBA】セル範囲を画像としてコピーする|CopyPicture -

時間計算のDateAdd 【VBA】DateAddで時間の足し算・引き算 -

[VBA]Convert stringto Date 【VBA】文字列を日付型に変える|CDateよりDateSerial -

[VBA]Killthe progress dialog VBA|保存処理(SaveAs)がフリーズする原因と対策 -

ユーザーフォームにドラッグ&ドロップ 【VBA】ドラッグアンドドロップできるユーザーフォーム|ListView