当有空白或 1 或“安全”时,VBA 会删除行,但使用公式保留具有 1 或“安全”的安全空单元格

当有空白或 1 或“安全”时,VBA 会删除行,但使用公式保留具有 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 或“Safe”的单元格不变:

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. 最后,自动过滤被关闭。

相关内容