ループを使用せずに、またはによってT2:T200
セルが空の場合にデータを安全に保ちながら、範囲から空白セルを削除したい""
1 (=if(b2<>"",1,"")
(=if(b2<>"","safe","")
Sub remove_blankrows()
Range("T2:T200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
答え1
これは、VBA の数式ベースのアプローチを使用して実現できます。範囲 T2:T200 内の空白セルを含む行を削除し、値が 1 または「安全」のセルはそのままにするには、次のようにします。
Sub remove_blankrows()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1") ' Replace "Sheet1" with your actual sheet name
' Apply the formula to identify rows to delete
ws.Range("U2:U200").Formula = "=IF(OR(T2="""", T2=1, T2=""Safe""), """", ""Delete"")"
' Filter and delete rows based on the formula result
ws.Range("U2:U200").AutoFilter Field:=1, Criteria1:="Delete"
ws.Range("U2:U200").SpecialCells(xlCellTypeVisible).EntireRow.Delete
ws.AutoFilterMode = False
' Clear the temporary formula column
ws.Range("U2:U200").ClearContents
End Sub
- 範囲 U2:U200 は、条件に基づいて削除する行をマークする数式を適用するための一時的な列として使用されます。
- この数式は、列 T の対応するセルが空白 ("")、1、または "Safe" であるかどうかをチェックし、行を削除する必要があることを示す空の文字列 ("") を返します。
- 数式を適用した後、コードは一時列にオートフィルターを設定し、「削除」としてマークされた行をフィルターします。
- 次に、表示されている行を削除し、一時的な数式列をクリアします。
- 最後に、オートフィルターがオフになります。