Excelのテーブルを全行削除
Excel2007以降には「Ctrl」+「T」でテーブルを作成する機能がある。
ListObjectsにまとめられていて使い勝手がいいので、
VBA使いとしては業務自動化に当たって重宝したい機能である。
そんな中で4000行程度のテーブルをクリアする機会があり、フリーズで行き詰ったので掲載。
最速の方法
いろいろ試してみたが、以下が最速。
行は全て消えるが、数式と列タイトルは残る。
Dim myTable As ListObject
Set myTable = ThisWorkbook.Sheets("Sheet1").ListObjects("テーブル1")
If Not (myTable.DataBodyRange Is Nothing) Then
myTable.DataBodyRange.Delete
End If
他の方法
1行ずつ削除するのを繰り返し行うものだが、
この方法が通用するのはせいぜい数十行までだった。
テスト環境では100行を超えたあたりからフリーズした。
Dim myTable As ListObject
Set myTable = ThisWorkbook.Sheets("Sheet1").ListObjects("テーブル1")
If Not (myTable.DataBodyRange Is Nothing) Then
With myTable.ListRows
For i = .Count To 1 Step -1
.Item(i).Delete
Next i
End With
End If
テスト環境
- Windows10 Pro
- Microsoft Office 2013
- RAM 8GB
- CPU intel CORE i5
追記
もしかしたら、object.Range(object.Cells(),object.Cells()).Delete
で範囲指定して消してからListObject.Resize()
した方が速いかもしれない。未検証。しかし、コーディングとかメンテナンスの手間、可読性を考えるとやはりListObject.DataBodyRange.Delete
一択。
Excelsior!