すべてのコンテンツを削除する必要がある大きなシートがあります。 VBAなしで単純にクリアしようとすると、応答なしモードになります。次のようなマクロを使用する場合:
Sub ClearContents ()
Application.Calculation = XlManual
Application.ScreenUpdating = False
Sheets("Zeroes").Cells.ClearContents
Application.ScreenUpdating = True
End Sub
また、応答しません。これを行う最も速い方法は何ですか?
.Cellsの範囲は使用されているものに限定されないため、コードは1,048,576行と16,384列(合計17,179,869,184セル)の内容を消去します。それには時間がかかります。代わりに、UsedRangeをクリアするだけです。
Sheets("Zeros").UsedRange.ClearContents
または、シートを削除してから追加し直すこともできます。
Application.DisplayAlerts = False
Sheets("Zeros").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Zeros"
技術的には、コミンテルンの受け入れられている回避策から、実際にシート内のすべてのセルを削除したいと考えています。セルの内容だけでなく、書式設定(例外については脚注を参照)などを削除します。つまりSheets("Zeroes").Cells.Delete
また、UsedRange、ScreenUpdating、およびそれをスキップする計算と組み合わせると、ほとんど瞬時になります。
Sub DeleteCells ()
Application.Calculation = XlManual
Application.ScreenUpdating = False
Sheets("Zeroes").UsedRange.Delete
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub
または、Excelの現在の計算状態を尊重する場合:
Sub DeleteCells ()
Dim SaveCalcState
SaveCalcState = Application.Calculation
Application.Calculation = XlManual
Application.ScreenUpdating = False
Sheets("Zeroes").UsedRange.Delete
Application.ScreenUpdating = True
Application.Calculation = SaveCalcState
End Sub
脚注:列全体にフォーマットが適用された場合、それは削除されません。これには、フォントの色、塗りつぶしの色と境界線、書式カテゴリ(一般、日付、テキストなど)、およびその他のプロパティも含まれますが、
条件付き書式ISが削除されました-行全体書式。
(列全体フォーマットは、単純な貼り付け値のみのタイプのインポートが行われた場合に元々適用されたフォーマットに準拠するため、生データを繰り返しシートにインポートする場合に非常に役立ちます。)
.Clearメソッドを使用できます。
Sheets("Zeros").UsedRange.Clear
これを使用すると、ワークシートの残りの部分に影響を与えることなく、セルまたは範囲のcontentsおよびformattingを削除できます。
これを試してください:
Sub clear_sht
Dim sht As Worksheet
Set sht = Worksheets(GENERATOR_SHT_NAME)
col_cnt = sht.UsedRange.Columns.count
If col_cnt = 0 Then
col_cnt = 1
End If
sht.Range(sht.Cells(1, 1), sht.Cells(sht.UsedRange.Rows.count, col_cnt)).Clear
End Sub