Sub TEST1()
'2行目を削除
ActiveSheet.ListObjects("テーブル1").ListRows(2).Delete
End Sub
「構造化参照」を使う場合は、次のようになります。
Sub TEST2()
'2行目を削除
Range("テーブル1").Rows(2).Delete
End Sub
では、テーブルの2行目を削除してみます。
2行目を削除したい
VBAコードを実行すると、テーブルの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列目を削除したい
VBAコードを実行すると、テーブルの1列目を削除できます。
1列目を削除できた
テーブルの1列目を削除できました。
テーブルのすべての行を削除する
次は、テーブルの「すべての行」を削除してみます。
テーブルを初期化する方法になります。
すべての行を削除して初期化する
すべての行を削除して初期化してみます。
テーブルを初期化する
すべての行を削除して、テーブルを初期化するVBAコードです。
Sub TEST5()
'すべての行を削除して初期化
ActiveSheet.ListObjects("テーブル1").DataBodyRange.Delete
End Sub
やりたい内容は、テーブルを初期化したい、ということになります。
実行すると、テーブルを初期化できます。
テーブルを初期化できました。
初期化したテーブルだとエラー
初期化したテーブルで実行するとエラーとなってしまいます。
データがない場合は、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"」でフィルタされます。
「.Delete」だけだとメッセージが表示されちゃいます。
OKをクリックすると、行全体を削除できます。
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」を使うと、メッセージを表示しないで、行全体を削除できます。
メッセージを表示しないで、行全体を削除できました。
フィルタ結果がない場合すべてのデータが消えちゃう
ただこのままでは、フィルタ結果がない場合は、すべてのデータが消えちゃいます。
実行してみます。
すべてのデータが消えちゃいます。
すべてのデータが消えちゃいました。
フィルタ結果がない場合はそのままにしたい
フィルタした結果がない場合は、削除せずにそのままにしてみます。
フィルタした結果がない場合は、削除せずにそのままにする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」を使うと、行全体が消えちゃうのがデメリットです。
実行すると、テーブル以外の、他の行のデータも消えちゃいます。
テーブル以外の、他の行のデータも消えちゃいました。
テーブルのデータのみを削除したい場合は、「.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列目の、データ行数を取得します。
テーブルサイズを変更して、不要な行を削除します。
これで、テーブル内の「"A"」のみを削除できます。
テーブル内の「"A"」のみを削除できました。
テーブル内のデータのみを削除できる
「.Clear」を使う方法だと、テーブル内のデータのみを、削除することができます。
実行すると、テーブル内のデータのみを削除できます。
テーブル内のデータのみを削除できました。
フィルタ結果がない場合はエラー
このままでは、フィルタ結果がない場合は、エラーとなってしまいます。
フィルタ結果がないので、エラーとなります。
「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