【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
編集後記:
この記事の内容がベストではないかもしれません。