LoginSignup
13
17

More than 1 year has passed since last update.

Excelのテーブルから最速で全行削除する

Last updated at Posted at 2018-11-17

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!

13
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17