エクセル作業では、オートフィルタで抽出した行だけを削除する時がありますよね。
こういう作業を自動化できると、生産性が向上します。
今回は「VBAでオートフィルタで抽出した行だけを削除する方法」を解説します。
【VBAマクロ】オートフィルタで抽出した行だけを削除する方法を解説
オートフィルタで抽出した行だけを削除するコードは、以下のとおりです。
このVBAコードの行では、targetRange.Delete shift:=xlUp
を使用して、targetRange
に設定された範囲内のセル(表示されたセルのみ)を削除しています。そして、削除されたセルの空白部分を埋めるために、セルを上にシフトしています。
Sub test()
Dim targetRange As Range
' オートフィルタの設定(今回は2行目に"B"と書かれた行を削除)
With Range("A1").CurrentRegion
.AutoFilter field:=2, Criteria1:="B"
' 絞り込んだ行(表示させた行)のみを対象として取得
Set targetRange = .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
' オートフィルターを削除
.AutoFilter
End With
' 絞り込んだ行(表示させた行)のみを削除
targetRange.Delete shift:=xlUp
End Sub
このコードでは、With
ステートメントを使用して、オートフィルタリング、範囲の取得、およびオートフィルターの解除を一連の操作として実行しています。
また、.SpecialCells(xlCellTypeVisible)
を使用して、絞り込んだ行(表示させた行)のみを取得しています。
オートフィルタリング
このVBAコードのセクションでは、With
ステートメントを使用して、セルA1を含む現在の領域(連続したセル範囲)にオートフィルタを適用します。
オートフィルタのフィールド2(2番目の列)に基づいて、基準として”B”を持つ行のみを表示します。
With Range("A1").CurrentRegion
:セルA1を含む現在の領域(連続したセル範囲)を指定します。With
ステートメント内の後続のコードは、この範囲に適用されます。.AutoFilter field:=2, Criteria1:="B"
:範囲内のフィールド2(2番目の列)にオートフィルタを適用し、基準として”B”を持つ行のみを表示します。
このコードセクションは、オートフィルタリングを適用し、特定の基準に基づいてデータを絞り込むために使用されます。
範囲の取得
このVBAコードのセクションでは、With
ステートメントを使用して、表示された(絞り込まれた)セルの範囲をtargetRange
に設定しています。コードは以下の手順で機能します。
With Range("A1").CurrentRegion
:セルA1を含む現在の領域(連続したセル範囲)を指定します。With
ステートメント内の後続のコードは、この範囲に適用されます。.Offset(1, 0)
:選択された範囲(現在の領域)を1行下にずらします。これにより、ヘッダー行を除外し、データ行のみが対象となります。.Resize(.Rows.Count - 1)
:範囲のサイズを変更し、1行減らします。これは、先程オフセットした1行分を補正するためです。結果として、ヘッダー行を除くデータ行のみが含まれる範囲が得られます。.SpecialCells(xlCellTypeVisible)
:絞り込まれた(表示された)セルのみを含む範囲を取得します。これは、オートフィルタで適用された基準によって表示されたセルのみを対象とします。
最終的に、Set targetRange =
で、上記の操作を経て得られた範囲をtargetRange
変数に設定します。これにより、表示されたセルの範囲を効率的に取得できます。
.SpecialCells(xlCellTypeVisible)
は、VBA(Visual Basic for Applications)のメソッドで、指定した範囲内の特定のタイプのセルを返します。
この場合、xlCellTypeVisible
は、表示されているセル(絞り込まれたセル)のみを返す特別なセルタイプを指定しています。
オートフィルタが適用されている場合、表示されているセルはフィルタ条件に一致するセルであり、非表示のセルは条件に一致しないセルです。
SpecialCells
メソッドを使用すると、表示されているセルだけを取得できるため、オートフィルタの結果に基づいて処理を行うことができます。
絞り込んだ行(表示させた行)のみを削除
このVBAコードのセクションでは、targetRange.Delete shift:=xlUp
を使用して、targetRange
に設定された範囲内のセル(表示されたセルのみ)を削除しています。
そして、削除されたセルの空白部分を埋めるために、セルを上にシフトしています。
targetRange.Delete
:targetRange
に設定された範囲のセルを削除します。このケースでは、表示されたセルのみが対象となります。shift:=xlUp
:削除されたセルの空白を埋めるために、残りのセルを上にシフトします。これにより、データが連続したまま保たれ、空白の行が残らないようになります。
このコード行は、オートフィルタで絞り込まれた(表示された)セルを効率的に削除し、データを整理するために使用されます。
コメント