VBA は、空白または 1 または「安全」な行を削除しますが、数式を使用して 1 または「安全」な空のセルを安全に保持します。

VBA は、空白または 1 または「安全」な行を削除しますが、数式を使用して 1 または「安全」な空のセルを安全に保持します。

ループを使用せずに、またはによって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
  1. 範囲 U2:U200 は、条件に基づいて削除する行をマークする数式を適用するための一時的な列として使用されます。
  2. この数式は、列 T の対応するセルが空白 ("")、1、または "Safe" であるかどうかをチェックし、行を削除する必要があることを示す空の文字列 ("") を返します。
  3. 数式を適用した後、コードは一時列にオートフィルターを設定し、「削除」としてマークされた行をフィルターします。
  4. 次に、表示されている行を削除し、一時的な数式列をクリアします。
  5. 最後に、オートフィルターがオフになります。

関連情報