Macro Eliminar fila según condición

EXpertos :

Tengo un archivo extenso de "n" filas. Necesito eliminar filas que contenga estos criterios:

C3; C8 ;C22 ;C21 ;S.T ;C5 ;C25 ;C13 ;C14 ;C16 ;C17 ;C12; C20; C15;  C18 y que se ubican en la columna AP

¿Tendrán una rutina para que me la pasen?

1 respuesta

Respuesta
3

¿Pero C3 es una celda o es un dato?

Te anexo una macro, si en la columna AP tienes un valor, por ejemplo: "C3", esa fila se elimina

Sub EliminarFila()
'Por.Dante Amor
    cond = Array("C3", "C8", "C22", "C21", "C5", "C25", "C13", "C14", "C16", "C17", "C12", "C20", "C15", "C18")
    For i = Range("AP" & Rows.Count).End(xlUp).Row To 1 Step -1
        For j = LBound(cond) To UBound(cond)
            If Cells(i, "AP") = cond(j) Then
                Rows(i).Delete
                Exit For
            End If
        Next
    Next
    MsgBox "Terminado"
End Sub

Si es algo diferente , pon algunos ejemplos de tus condiciones o unas imágenes de lo que tienes.

No me permite pegar imagen me sale error... el archivo es muy pesado para enviártelo... Los criterios de búsqueda para eliminar son datos... He ejecutado la rutina pero no elimina las filas

No entiendo cómo tienes los datos, envíame una muestra de tu archivo, sólo envíame 3 o 4 registros de cómo tienes la información y cómo la quieres borrar

Ya lo envíe quedo a la esper

No me ha llegado el archivo con ejemplos.

Revisa mi correo

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Alberto Saul Meza” y el título de esta pregunta.

Ya me llegó el archivo, preparo la macro y te la envío

La macro sí funciona, hice la prueba en el archivo que me enviaste y sí borra las filas.

Le hice un cambio a la macro, para que se más rápida y le agregué el dato "S.T".

Sub EliminarFila()
'Por.Dante Amor
    Application.ScreenUpdating = False
    cond = Array("C3", "C8", "C22", "C21", "S.T", "C5", "C25", "C13", "C14", "C16", "C17", "C12", "C20", "C15", "C18")
    For i = Range("AP" & Rows.Count).End(xlUp).Row To 1 Step -1
        For j = LBound(cond) To UBound(cond)
            If Cells(i, "AP") = cond(j) Then
                Rows(i).Delete
                Exit For
            End If
        Next
    Next
    MsgBox "Terminado"
End Sub

Si tienes muchos registros, la macro va a hacer un poco lenta porque tiene que revisar registro por registro y dato por dato.


Te anexo otra macro para borrar más rápido.

Sub Macro1()
'Por.Dante Amor
    Set h1 = Sheets("Hoja2")
    Set h2 = Sheets("criterios")
    On Error Resume Next
    If h1.FilterMode Then h1.ShowAllData
    On Error GoTo 0
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("A1:AP" & u1).AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=h2.Range("A1:A" & u2), Unique:=False
    u3 = h1.Range("A" & Rows.Count).End(xlUp).Row
    If u3 > 1 Then
        h1.Rows(2 & ":" & u1).Delete
    End If
    On Error Resume Next
    If h1.FilterMode Then h1.ShowAllData
End Sub

Tienes que crear una hoja llamada "criterios" y poner en la columna "A" los criterios.

En el encabezado de la columna "A" tienes que poner el mismo que tienes en la columna "AP" = "CATEGORIA2"


Cualquiera de las 2 macro funciona. También te envié el archivo con la hoja "criterios" y la macro en el módulo2.


Saludos. Dante Amor

Te envié los archivos con la prueba de que si borra, de hecho borra en mis ejemplos y en tus archivos.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas