web-dev-qa-db-ja.com

すべてのシートコンテンツVBAを消去する最も簡単な方法

すべてのコンテンツを削除する必要がある大きなシートがあります。 VBAなしで単純にクリアしようとすると、応答なしモードになります。次のようなマクロを使用する場合:

Sub ClearContents ()
 Application.Calculation = XlManual
 Application.ScreenUpdating = False

  Sheets("Zeroes").Cells.ClearContents

 Application.ScreenUpdating = True
End Sub

また、応答しません。これを行う最も速い方法は何ですか?

42
hc91

.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"
81
Comintern

技術的には、コミンテルンの受け入れられている回避策から、実際にシート内のすべてのセルを削除したいと考えています。セルの内容だけでなく、書式設定(例外については脚注を参照)などを削除します。つまり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が削除されました-行全体書式。

列全体フォーマットは、単純な貼り付け値のみのタイプのインポートが行われた場合に元々適用されたフォーマットに準拠するため、生データを繰り返しシートにインポートする場合に非常に役立ちます。)

11
Stax

.Clearメソッドを使用できます。

Sheets("Zeros").UsedRange.Clear

これを使用すると、ワークシートの残りの部分に影響を与えることなく、セルまたは範囲のcontentsおよびformattingを削除できます。

5
Jones

これを試してください:

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
0
Zernel