VBA elimina filas cuando hay espacios en blanco o 1 o "Seguro", pero mantiene segura la celda vacía que tiene 1 o "Seguro" usando la fórmula

VBA elimina filas cuando hay espacios en blanco o 1 o "Seguro", pero mantiene segura la celda vacía que tiene 1 o "Seguro" usando la fórmula

Quiero eliminar la celda en blanco del rango T2:T200manteniendo los datos seguros si la celda está vacía usando ""o 1 (=if(b2<>"",1,"")sin (=if(b2<>"","safe","")el bucle

Sub remove_blankrows()
Range("T2:T200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Respuesta1

Puede lograr esto utilizando un enfoque basado en fórmulas en VBA. Para eliminar filas que contienen celdas en blanco en el rango T2:T200 manteniendo intactas las celdas con el valor 1 o "Segura":

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. El rango U2:U200 se utiliza como columna temporal para aplicar una fórmula que marca filas para su eliminación según los criterios.
  2. La fórmula verifica si la celda correspondiente en la columna T está en blanco (""), 1 o "Segura" y devuelve una cadena vacía (""), lo que indica que la fila debe eliminarse.
  3. Después de aplicar la fórmula, el código configura un Autofiltro en la columna temporal y filtra las filas marcadas como "Eliminar".
  4. Luego elimina las filas visibles y borra la columna de fórmula temporal.
  5. Finalmente, el Autofiltro se apaga.

información relacionada