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

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

¿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 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

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.
- Compartir respuesta
