17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
17
Help us understand the problem. What are the problem?