【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]開始と終了イベント停止と再開 【VBA高速化】開始と終了のルーチン呼び出し
- 
          
            
      
       [VBA]Control the calculation再計算 【VBA】指定のシートを再計算する|Calculate
- 
          
            
      
       [VBA]CreateObjectまとめ 【VBA】CreateObject|dictionary・テキストファイル・outlook・Access用にオブジェクトを生成する
- 
          
            
      
       [VBA]openbook 【VBA】ブックを開く|OpenBook
- 
          
            
      
       [VBA]fsoSingleton pattern 【VBA】FSO(“Scripting.FileSystemObject”)|シングルトン化して使う
- 
          
            
      
       [VBA]開いているかwith FullName 【VBA】ブックが開いているか判定|StrComp で FullNameを調べる