手動で行の削除がめんどくさい、他のツールとの連携で自動化したいなどあるかと思います。
VBA(Excelマクロ)を使用して、大量の表データから不要なデータを削除したい場合は、以前の私は1行1行削除するようにプログラムを作成していましたが、オートフィルタを使用して削除する方が処理が断然早いということに気づきましたので、オートフィルタを使用して行を削除する方法を紹介したいと思います。

もし、1行1行削除したい場合は、1行目からではなく最終行から削除することをお勧めします。
というのも、行を削除すると上に詰めるしかないのでズレていきます。
データの準備
既に試しで使用するデータがある方は、そのデータを使用していただければ良いです。
データがないという方向けに下記のプログラムを用意しましたので、実行していただければ、私が使用するデータと同じ下記の表が作成できます。
Sub テストデータ作成() For i = 1 To 5 '列名作成 Cells(1, i) = i & "列目" '行データ作成 For j = 2 To 6 Cells(j, i) = "データ" & i & j Next j Next i End Sub
オートフィルタの方法
いきなりオートフィルタで複数行を削除する前に、まずはVBAでオートフィルタをする方法を例で紹介していきます。
オートフィルタ
(例1)表データの1列目(A列)が「データ13」を対象にオートフィルタした場合
Sub オートフィルタ() Range("A1").AutoFilter 1, "=" & "データ13" End Sub
1:1列目
“=”:条件の不等号
“データ13″:オートフィルタ条件(データ13のみを表示する)
(例2)表データの2列目(B列)が「データ22以外」を対象にオートフィルタした場合
Sub オートフィルタ() Range("A1").AutoFilter 2, "<>" & "データ22" End Sub
2:2列目
“<>”:条件の不等号
“データ22″:オートフィルタ条件(データ22以外を表示する)
オートフィルタの解除
オートフィルタを解除したい場合は、下記のプログラムで解除出来ます。
先ほどのRange(“A1”)と同じ場所を指定してください。
Sub オートフィルタ解除() Range("A1").AutoFilter End Sub

オートフィルタの解除は、オートフィルタを再度実行することで出来ます!!
オートフィルタで削除する方法
VBAでオートフィルタを実装する方法まで理解できたかと思いますので、オートフィルタで削除するやり方を紹介していきます。
(例)表データの2列目(B列)が「データ22以外」を対象に削除した場合
Sub オートフィルタ削除() Dim FRng Dim FRngRow 'オートフィルタ Range("A1").AutoFilter 2, "<>" & "データ22" '表示されているデータの削除 Set FRng = ActiveSheet.AutoFilter.Range '範囲取得 FRngRow = FRng.Rows.Count '行数を取得 Rows("2:" & FRngRow).SpecialCells(xlCellTypeVisible).Delete '表示データを削除 'オートフィルタの解除 Range("A1").AutoFilter End Sub
オートフィルタ後に表示されているデータの範囲を取得しています。②.FRngRow = FRng.Rows.Count①で取得したデータの範囲の行数を取得しています。③.Rows(“2:” & FRngRow).SpecialCells(xlCellTypeVisible).Delete
2行目から②で取得した行数まで削除しています。

Rows(“2:” & FRngRow).SpecialCells(xlCellTypeVisible).Deleteの「2」を「3」に変更したら、3行目から削除できます。
'表示されているデータの削除 Set FRng = ActiveSheet.AutoFilter.Range '範囲取得 FRngRow = FRng.Rows.Count '行数を取得 Rows("2:" & FRngRow).SpecialCells(xlCellTypeVisible).Delete '表示データを削除
オートフィルタを使用することで簡単にデータを削除することが出来ます。
データを1行1行ループして削除する方法もありますが、1行目から削除するとズレますので、最終行から削除する必要があります。
また、処理速度もループよりオートフィルタの方が早いのでオートフィルタで削除することをお勧めします。
コメント