大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、テーブルの行や、列、すべての行、テーブル、特定の行を削除する方法について、ご紹介します。テーブルの削除は、テーブルの部位を指定して、「.Delete」を使うとできます。特定の行のみを削除したい場合は、「.Clear」を使う方法が便利です。テーブルの操作をマスターしていきましょう。

はじめに

この記事では、テーブルを削除する方法について、ご紹介します。

行や列の単位で、テーブルを削除したい場合は、「.ListRows(行番号).Delete」や「.ListColumns(列番号).Delete」を使います。

テーブルを初期化したい場合は、「.DataBodyRange.Delete」でできます。

テーブルのデータのみを削除したい場合は、「.DataBodyRange.Clear」を使います。

テーブルを削除したい場合は、「.ListObjects(インデックス).Delete」や「.ListObjects(テーブル名).Delete」、「セル.ListObject.Delete」です。

テーブルの特定の行を削除したい場合は、オートフィルタでフィルタして、「.Delete」もしくは「.Clear」を使って、行を削除します。

VBAでのテーブル操作をマスターしていきましょう。

では、テーブルを削除する方法について、解説していきます。

この記事を読むメリット

  • テーブルの行、列、すべての行、テーブル、特定の行を削除する方法がわかります

目次から見たい項目へ移動すると便利ですよ。

目次

テーブルの行や列を削除する

テーブルの行や列を削除してみます。

2行目を削除

テーブルの2行目を削除するVBAコードです。

「ListObjects」を使った場合です。

Sub TEST1()
    
    '2行目を削除
    ActiveSheet.ListObjects("テーブル1").ListRows(2).Delete
    
End Sub

「構造化参照」を使う場合は、次のようになります。

Sub TEST2()
    
    '2行目を削除
    Range("テーブル1").Rows(2).Delete
    
End Sub

では、テーブルの2行目を削除してみます。

2行目を削除したい

テーブルの2行目を削除してみます

VBAコードを実行すると、テーブルの2行目を削除できます。

2行目を削除できた

テーブルの2行目を削除できました

テーブルの2行目を削除できました。

1列目を削除

次は、テーブルの「1列目」を削除してみます。

「ListObjects」を使った場合です。

Sub TEST3()
    
    '1列目を削除
    ActiveSheet.ListObjects("テーブル1").ListColumns(1).Delete
    'もしくは
    ActiveSheet.ListObjects("テーブル1").ListColumns("名前").Delete
    
End Sub

「構造化参照」を使う場合は、次のようになります。

Sub TEST4()
    
    '1列目を削除
    Range("テーブル1[[#ALL],[名前]]").Delete
    
End Sub

では、テーブルの1列目を削除してみます。

1列目を削除したい

テーブルの1列目を削除してみます

VBAコードを実行すると、テーブルの1列目を削除できます。

1列目を削除できた

テーブルの1列目を削除できました

テーブルの1列目を削除できました。

テーブルのすべての行を削除する

次は、テーブルの「すべての行」を削除してみます。

テーブルを初期化する方法になります。

すべての行を削除して初期化する

すべての行を削除して初期化してみます。

テーブルを初期化する

すべての行を削除して、テーブルを初期化するVBAコードです。

Sub TEST5()
    
    'すべての行を削除して初期化
    ActiveSheet.ListObjects("テーブル1").DataBodyRange.Delete
    
End Sub

やりたい内容は、テーブルを初期化したい、ということになります。

やりたい内容は、テーブルを初期化したい、ということになります

実行すると、テーブルを初期化できます。

テーブルを初期化できました

テーブルを初期化できました。

初期化したテーブルだとエラー

初期化したテーブルで実行するとエラーとなってしまいます。

初期化したテーブルで実行するとエラーとなってしまいます

データがない場合は、DataBodyRangeが使えないので、エラーとなってしまいます。

DataBodyRangeが使えないので、エラーとなってしまいました

DataBodyRangeが使えないので、エラーとなってしまいました。

初期化したテーブルは無視する

エラーを回避するために、初期化したテーブルは無視する条件を、追加するといいです。

Sub TEST6()
    
    With ActiveSheet.ListObjects("テーブル1")
        'データがある場合
        If Not .DataBodyRange Is Nothing Then
            'すべての行を削除して初期化
            .DataBodyRange.Delete
        End If
    End With
    
End Sub

初期化したテーブルの場合は無視して、そのままにします。

初期化したテーブルの場合は無視する条件を追加します

VBAコードを実行してみます。

初期化したテーブルの場合は、無視できました

初期化したテーブルの場合は、無視できました。

うまくエラーを回避できています。

すべてのデータを削除

次は、すべてのデータを削除してみます。

「ListObject」を使う場合です。

Sub TEST7()
    
    'すべてのデータを削除
    ActiveSheet.ListObjects("テーブル1").DataBodyRange.Clear
    
End Sub

「構造化参照」を使う場合は次のようになります。

Sub TEST8()
    
    'すべてのデータを削除
    Range("テーブル1").Clear
    
End Sub

では、テーブル内のすべてのデータを削除してみます。

すべてのデータを削除したい

テーブル内のすべてのデータを削除してみます

実行すると、テーブル内のすべてのデータを削除できます。

すべてのデータを削除できた

テーブル内のすべてのデータを削除できました

テーブル内のすべてのデータを削除できました。

テーブルを削除する

次は、テーブルを削除してみます。

指定したテーブルを削除

指定したテーブルを削除する方法は、3つあります。

  • テーブルの番号を使う
  • テーブル名を使う
  • テーブルの位置を使う

という感じです。

それぞれ次のようになります。

「テーブルの番号を使う」場合です。

Sub TEST9()
    
    '1つ目のテーブルを削除
    ActiveSheet.ListObjects(1).Delete
    
End Sub

「テーブル名を使う」場合です。

Sub TEST10()
    
    '「テーブル1」のテーブルを削除
    ActiveSheet.ListObjects("テーブル1").Delete
    
End Sub

「テーブルの位置を使う」場合です。

Sub TEST11()
    
    '「B2」にあるテーブルを削除
    Range("B2").ListObject.Delete
    
End Sub

では、指定したテーブルを削除してみます。

指定したテーブルを削除したい

指定したテーブルを削除してみます

実行すると、指定したテーブルを削除できます。

指定したテーブルを削除できた

指定したテーブルを削除できました

指定したテーブルを削除できました。

シート内のすべてのテーブルを削除

次は、シート内のすべてのテーブルを削除してみます。

テーブルをループして、削除するという手順になります。

「For Each」を使う場合です。

Sub TEST12()
    
    Dim A
    'シート内のテーブルをループ
    For Each A In ActiveSheet.ListObjects
        A.Delete 'テーブルを削除
    Next
    
End Sub

「For~Next」を使う場合です。

Sub TEST13()
    
    'シート内のテーブルをループ
    For i = ActiveSheet.ListObjects.Count To 1 Step -1
        'テーブルを削除
        ActiveSheet.ListObjects(i).Delete
    Next
        
End Sub

では、シート内の、すべてのテーブルを削除してみます。

シート内のすべてのテーブルを削除したい

シート内の、すべてのテーブルを削除してみます

実行すると、シート内の、すべてのテーブルを削除できます。

シート内のすべてのテーブルを削除できた

シート内の、すべてのテーブルを削除できました

シート内の、すべてのテーブルを削除できました。

テーブルでフィルタした行を削除する

テーブルで「フィルタした行」を削除してみます。

フィルタした行全体を削除する

フィルタした行全体を削除してみます。

フィルタした行全体を削除

やりたい内容は、フィルタした行全体を削除したい、ということになります。

フィルタした行全体を削除してみます

フィルタした行全体を削除するVBAコードです。

Sub TEST14()
    
    With ActiveSheet.ListObjects("テーブル1")
        .Range.AutoFilter 1, "A" '1列目を「"A"」でフィルタ
        .DataBodyRange.Delete '表示している行全体を削除
        .Range.AutoFilter 1 '1列目のフィルタを解除
    End With
    
End Sub

手順は、次のようになります。

  • 1列目を「"A"」でフィルタ
  • 「.Delete」で行全体を削除する
  • フィルタを解除

という感じです。

では、実行してみます。

まずは、テーブルの1列目を「"A"」でフィルタされます。

テーブルの1列目を「

「.Delete」だけだとメッセージが表示されちゃいます。

「.Delete」だけだとメッセージが表示されちゃいます

OKをクリックすると、行全体を削除できます。

OKをクリックすると、行全体を削除できます

1列目のフィルタを解除します。

1列目のフィルタを解除します

これで、「"A"」のデータを削除できます。

「

「"A"」のデータを削除できました。

メッセージを表示しないでフィルタした行全体を削除

メッセージを表示しないで、フィルタした行全体を削除してみます。

メッセージを表示しないで、フィルタした行全体を削除してみます

メッセージを表示しないで、フィルタした行全体を削除するVBAコードです。

Sub TEST15()
    
    With ActiveSheet.ListObjects("テーブル1")
        .Range.AutoFilter 1, "A" '1列目を「"A"」でフィルタ
        .DataBodyRange.EntireRow.Delete '表示している行全体を削除
        .Range.AutoFilter 1 '1列目のフィルタを解除
    End With
    
End Sub

「.EntireRow.Delete」を使うと、メッセージを表示しないで、行全体を削除できます。

「.EntireRow.Delete」を使って、メッセージを表示しないで、行全体を削除できました

メッセージを表示しないで、行全体を削除できました。

フィルタ結果がない場合すべてのデータが消えちゃう

ただこのままでは、フィルタ結果がない場合は、すべてのデータが消えちゃいます。

フィルタ結果がない場合は、すべてのデータが消えちゃいます

実行してみます。

すべてのデータが消えちゃいます。

すべてのデータが消えちゃいました

すべてのデータが消えちゃいました。

フィルタ結果がない場合はそのままにしたい

フィルタした結果がない場合は、削除せずにそのままにしてみます。

フィルタした結果がない場合は、削除せずにそのままにしてみます

フィルタした結果がない場合は、削除せずにそのままにするVBAコードです。

Sub TEST16()
    
    With ActiveSheet.ListObjects("テーブル1")
        .Range.AutoFilter 1, "A" '1列目を「"A"」でフィルタ
        '表示行がある場合
        If .Range.SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
            '表示している行全体を削除
            .DataBodyRange.EntireRow.Delete
        End If
        .Range.AutoFilter 1 '1列目のフィルタを解除
    End With
    
End Sub

フィルタした結果がない場合は、そのままにできます。

フィルタした結果がない場合は、そのままにできました

フィルタした結果がない場合は、そのままにできました。

行全体が消えちゃうのがデメリット

「.EntireRow.Delete」を使うと、行全体が消えちゃうのがデメリットです。

「.EntireRow.Delete」を使うと、行全体が消えちゃうのがデメリットです

実行すると、テーブル以外の、他の行のデータも消えちゃいます。

テーブル以外の、他の行のデータも消えちゃいました

テーブル以外の、他の行のデータも消えちゃいました。

テーブルのデータのみを削除したい場合は、「.Clear」を使う方法が使えます。

次で解説します。

テーブル内のフィルタした行を削除する

テーブル内のフィルタした行を、削除してみます。

テーブル内のフィルタした行を削除

やりたい内容は、テーブル内のフィルタした行のみを削除したい、ということになります。

テーブル内の、フィルタした行のみを削除してみます

テーブル内の、フィルタした行のみを削除するVBAコードです。

Sub TEST17()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1")
        .Range.AutoFilter 1, "A" '1列目を「"A"」でフィルタ
        '表示しているセルをクリア
        .DataBodyRange.SpecialCells(xlCellTypeVisible).Clear
        .Range.AutoFilter 1 '1列目のフィルタを解除
        '1列目を昇順にソート
        .Range.Sort key1:=.ListColumns(1).Range, order1:=xlAscending, Header:=xlYes
        'データ行数を取得
        A = .ListColumns(1).Range.Find("*", , , , 1, 2).Row - .Range.Row
        'テーブルサイズを、データ範囲のみに変更
        .Resize .Range.Resize(A + 1)
    End With
    
End Sub

手順は、次のようになります。

  • 1列目を「"A"」でフィルタする
  • フィルタ結果のデータをクリアする
  • フィルタを解除する
  • 1列目で昇順に並び替えする
  • テーブルのサイズを変更する

という感じです。

では、実行してみます。

テーブルの1列目を、「"A"」でフィルタします。

テーブルの1列目を、「

フィルタしたデータをクリアします。

フィルタしたデータをクリアします

1列目のフィルタを解除します。

1列目のフィルタを解除します

テーブルの1列目で、昇順に並び替えをします。

テーブルの1列目で、昇順に並び替えをします

1列目の、データ行数を取得します。

1列目の、データ行数を取得します

テーブルサイズを変更して、不要な行を削除します。

テーブルサイズを変更して、不要な行を削除します

これで、テーブル内の「"A"」のみを削除できます。

テーブル内の「

テーブル内の「"A"」のみを削除できました。

テーブル内のデータのみを削除できる

「.Clear」を使う方法だと、テーブル内のデータのみを、削除することができます。

テーブル内のデータのみを、削除することができます

実行すると、テーブル内のデータのみを削除できます。

テーブル内のデータのみを削除できました

テーブル内のデータのみを削除できました。

フィルタ結果がない場合はエラー

このままでは、フィルタ結果がない場合は、エラーとなってしまいます。

フィルタ結果がない場合は、エラーとなってしまいます

フィルタ結果がないので、エラーとなります。

フィルタ結果がないので、エラーとなります

「DataBodyRange」が使えないので、エラーとなってしまいます。

DataBodyRangeが使えないので、エラーとなってしまいました

エラーとなっちゃいました。

もう少し改良します。

フィルタ結果がない場合は無視する

フィルタ結果がない場合は、無視する条件を追加します。

フィルタ結果がない場合は、無視する条件を追加します

フィルタ結果がない場合は、無視する条件を追加したVBAコードです。

Sub TEST18()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1")
        .Range.AutoFilter 1, "A" '1列目を「"A"」でフィルタ
        '表示している行数が1より大きい場合
        If .Range.SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
            '表示しているセルをクリア
            .DataBodyRange.SpecialCells(xlCellTypeVisible).Clear
        End If
        .Range.AutoFilter 1 '1列目のフィルタを解除
        '1列目を昇順にソート
        .Range.Sort key1:=.ListColumns(1).Range, order1:=xlAscending, Header:=xlYes
        'データ行数を取得
        A = .ListColumns(1).Range.Find("*", , , , 1, 2).Row - .Range.Row
        'テーブルサイズを、データ範囲のみに変更
        .Resize .Range.Resize(A + 1)
    End With
    
End Sub

実行すると、フィルタ結果がない場合は無視して、そのままにできます。

フィルタ結果がない場合は無視して、そのままにできました

フィルタ結果がない場合は無視して、そのままにできました。

おわりに

この記事では、テーブルを削除する方法について、ご紹介しました。

行や列の単位で、テーブルを削除したい場合は、「.ListRows(行番号).Delete」や「.ListColumns(列番号).Delete」を使います。

テーブルを初期化したい場合は、「.DataBodyRange.Delete」でできます。

テーブルのデータのみを削除したい場合は、「.DataBodyRange.Clear」を使います。

テーブルを削除したい場合は、「.ListObjects(インデックス).Delete」や「.ListObjects(テーブル名).Delete」、「セル.ListObject.Delete」です。

テーブルの特定の行を削除したい場合は、オートフィルタでフィルタして、「.Delete」もしくは「.Clear」を使って、行を削除します。

VBAでのテーブル操作をマスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す