VBAで特定の条件を満たす行を削除する方法:フィルタと削除の手順

Visual Basic

VBAを使ってExcelでデータを操作する際、特定の条件を満たす行を削除する方法を学ぶことは非常に重要です。今回の質問は、セルの内容に「_」が含まれる行を削除し、上に詰めるというものです。以下では、VBAコードの理解と改善方法について解説します。

1. VBAで特定の条件を満たす行を削除する

まず、VBAを使って特定の条件を満たす行を削除するためには、「AutoFilter」機能を使ってフィルタを適用し、その後表示されたデータに対して削除を行う必要があります。しかし、質問者が遭遇した問題は、フィルタ後に行を削除する際に「シート行全体が削除される」という現象です。これは、VBAコード内で「行の削除」方法が適切でない場合に発生します。

2. 修正すべきVBAコード

質問者が書いたコードでは、フィルタ後に「SpecialCells(xlCellTypeVisible)」を使って削除を行っていますが、範囲指定が誤っているため、行全体が削除されてしまいます。これを解決するためには、対象のセル範囲を指定してから削除を行う必要があります。

以下のコードを参考にしてみてください。

'C列目を「_」でフィルタ
Range("A1").AutoFilter 3, Criteria1:="*_*"

'フィルタ後のC列の最終行を取得
LastRow = Cells(Rows.Count, 3).End(xlUp).Row

'フィルタした、C2からCの最終まで削除
Range(Range("C2"), Range("C" & LastRow)).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

'フィルタを解除
Range("A1").AutoFilter

このコードでは、「Shift:=xlUp」を指定することで、削除されたセルを上に詰めることができます。これにより、データが正しく整理されます。

3. 問題を解決するためのポイント

VBAで行を削除するとき、重要なのは削除対象の範囲を正確に指定することです。特に「SpecialCells(xlCellTypeVisible)」を使う場合、フィルタ後に表示されているセルを削除することができますが、行全体を削除しないように範囲を正しく指定する必要があります。また、「Shift:=xlUp」を使うことで、削除後にデータを詰めることができます。

4. まとめ

Excel VBAを使って特定の条件を満たす行を削除するには、フィルタを適切に使用し、削除対象となるセル範囲を正しく指定することが重要です。質問者のコードを改善することで、必要なデータだけを削除し、上に詰めることができます。VBAは非常に強力なツールなので、正しい手順を学ぶことで、作業の効率化が図れます。

コメント

タイトルとURLをコピーしました