Como eliminar filas que contengan 0 mediante macro

Estoy buscando una macro para eliminar las celdas que contengan el valor 0, en el rango de celdas C2:D5000

1 Respuesta

Respuesta
1

Quieres eliminar las filas donde la celda tenga el valor 0 o aquellas en las que el 0 sea parte del numero que esta en la celda por ejemplo, ¿10,20,30? Para el primer caso te paso esta macro.

Sub borrar_0()
Set datos = Range("c2").CurrentRegion
With datos
    R1 = .CurrentRegion.Rows.Count
    .Cells(1, 0) = 1
    rango = .Columns(0).Address
    .Cells(1, 0).AutoFill Destination:=Range(rango), Type:=xlFillSeries
    Set datos = .CurrentRegion
For i = 2 To 3
    r = .Rows.Count
    .Sort key1:=Range(.Columns(i).Address), order1:=xlDescending
    cuenta = WorksheetFunction.CountIf(.Columns(i), 0)
    .Rows(r - cuenta + 1).Resize(cuenta).ClearContents
    Set datos = .CurrentRegion
Next i
    .Sort key1:=Range(.Columns(1).Address), order1:=xlAscending
    .Columns(1).ClearContents
    r = .CurrentRegion.Rows.Count
    filas = R1 - r
    MsgBox (filas & " ELIMINADAS"), vbInformation, "AVISO EXCEL"
End With
Set datos = Nothing
End Sub

Buen día, la he aplicado pero me da error de depuración

¿Cuál es el error y en que línea?, lo que subí es un ejemplo para dos columnas y que el inicio sea la columna B si tienes más columnas se reqiere adaptar la macro. Sugiero que subas una imagen tanto del error como de los datos que manejas.

Esta es la línea de error

Esta es la planilla de datos, los ceros estarán en la columna c y d

Se ven en bco porque los tengo con una fórmula condicional

El problema si era lo que dije tienes más columnas y además hay otro problema las filas que quieres borrar tienen fórmulas enlazadas lo que quiere decir que si borras un fila en todas las demás celdas va a ponerse la leyenda #REF, para eso se tienen que convertir las fórmulas a valores y luego hacer la eliminación de celdas, tomando como base un achivo que subiste en otra consulta hice esta macro

Sub borrar_0()
Set datos = Range("a1").CurrentRegion
With datos
    r = .Rows.Count
    .Value = .Value
    Range("a1").EntireColumn.Insert
    .Cells(1, 0) = 1
    rango = .Columns(0).Address
    .Cells(1, 0).AutoFill Destination:=Range(rango), Type:=xlFillSeries
    Set datos = .CurrentRegion
    For i = 1 To 2
        .Sort key1:=Range(.Columns(i + 3).Address), order1:=xlDescending, Header:=xlYes
        cuenta = WorksheetFunction.CountIf(.Columns(i + 3), 0)
        fila = WorksheetFunction.Match(0, .Columns(i + 3), 0)
        .Rows(fila).Resize(cuenta).EntireRow.Delete
    Next i
.Sort key1:=Range(.Columns(1).Address), order1:=xlAscending, Header:=xlYes
End With
Range("a1").EntireColumn.Delete
Set datos = Nothing
End Sub

James, tengo un problema. Agregue unas filas superiores y ahora la macro no funciona

Me figura lo siguiente

Eso es porque cada que agregues filas arriba de los datos tienes que modificar la macro para que esta los tome en cuenta, sube una pantalla de lo que agregastte apra modificar la macro

¡Gracias! Ya lo resolvi!!!!

James buen dia

Hay alguna forma de que la propuesta de MACRO que me enviaste no me borre las fórmulas, ya que es una planilla que los datos de esta hoja vienen combinados de otra hoja que esta en el mismo libro.

El procedimiento es así: se envía la planilla de excel en blanco a los participantes, cada uno completa con sus datos la hoja "data participants", hay info de esta hoja que impacta en la hoja "full report" (donde tengo la macro para eliminar filas) y a su vez tengo datos de una hoja auxiliar llamada "datos" que impactan en "full report" según datos ingresados por el participante.

Espero haberme expresado correctamente. De ser necesario subo un modelo

Muchas grx!

El problema con lo que quieres hacer es precisamente ese que tienes fórmulas encadenadas (cada fórmula depende de la fila anterior) por el método que sea que se borre la fila se van a anular todas las fórmulas de la hoja y en su lugar te va a poner #NA o #REF, tendrías que cambiar tu modelo para que los cálculos en vez hacerlos con fórmulas se realicen a través de una macro, de hecho con que borres la primera fila vacía en C toda tu hoja con fórmulas se anula, yo use el modelo que subiste en otra pregunta y ese fue el resultado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas