Eliminar filas repetidas a partir de una condición en Excel.

Tengo un listado en una hoja de Excel en la cual me interesan las columnas " A " y " S ". En la columna A la información se puede repetir y en la columna S solo se muestran números: 0, 1, 2 y 3. Necesito una macro que busque la información repetida en la columna " A " y cuando la encuentre, compare entre esas filas en la columna S, que numero es mayor y elimine la fila donde el numero sea menor. Ejemplo:

En la fila 3 y la fila 6 se repite el numero de la columna A, pero en la columna S el numero de la fila 6 es mayor al de la 3, por ende, se eliminaría la fila 3 y se quedaría únicamente la fila 6. Y así, " n " cantidad de veces, hasta que encuentre una fila vacía.

2 Respuestas

Respuesta
1

 H o l a  : 

Y qué pasa si tienes 2 registros donde en la columna A y en la columna S son iguales, por ejemplo:

           A       ....           S

1

2

3         5                        1

4

5

6        5                        1

El registro 3 y 6 en la columna A son iguales, pero en la columna S también son iguales, cuál se debería eliminar.

Lo mismo pasa con los textos intermedios que comentas, en la columna A tienes "UID" y en la S tienes "PARTREV", ¿se deben eliminar o qué se hace en esos casos?

En este caso, en la columna " S " no se repitirian, porque son consecutivos del mismo. Un ejemplo. En la columna "A" se presenta el documento 5, los números 0,1,2...3 son las revisiones por las que pasa ese documento, para ser aprobado. Entonces, el documento 5, si se reviso 2 veces. puede aparecer 3 veces el documento, 5 con 0, 5 con 1 y 5 con 2. no se puede repetir dos veces la misma revisión. 

En el caso de los encabezados, si que se eliminen, puesto que caerán a un templete que ya tendrá su propio encabezado, por ese lado no hay problema. 

Espero haberme explicado y muchas gracias. 

Te anexo la macro

Sub EliminarFilas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A3:A" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("S3:S" & u), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange Range("A2:S" & u)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    '
    For i = Range("A" & Rows.Count).End(xlUp).Row To 3 Step -1
        For j = i - 1 To 3 Step -1
            If Cells(i, "A") = Cells(j, "A") Then
                If Cells(i, "S") <= Cells(j, "S") Then
                    Rows(i).Delete
                End If
            Else
                Exit For
            End If
        Next
    Next
    Application.ScreenUpdating = True
    MsgBox "fin"
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
1

Utiliza las funciones propias de Excel, de la siguiente manera :

Párate en uno de los encabezados de la tabla, y ve a la opción de "ordenar tabla", y dale dos criterios: columna A ascendente, columna S descendente, y clic en aceptar. Luego de nuevo te paras en uno de los encabezados de la tabla, y vas a la opción "quitar duplicados", cuando abra la ventana, das clic en el botón "anular selección" y luego marcas la casilla que corresponda a la columna A, y listo. La función quitar duplicados, los quita de abajo hacia arriba.

Caranbis, te agradezco por responder, pero no es precisamente lo que busco. Es muy bueno tu aporte, ya había intentado algo similar, pero hay filas que no se eliminan, como textos intermedios.

 Este es un ejemplo de como queda mi reporte con el método que me recomiendas. Necesito algo que sea mas especifico y recorra una por una las filas en pro de eliminar, hasta el final. 

Si me das un ejemplo de "textos intermedios", o más detallado lo que quieres hacer, te podría ayudar más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas