Buscar valores duplicados y eliminar la fila

Buenas tardes,
Me gustaría saber como hacer en macro alguna macro para que verifique todos los valores de la columna A. Si aparecen valores duplicados elimine TODA LA FILA. Espero que me puedan ayudar, he estado buscando como hacerlo y no lo he encontrado.
Un saludo, y gracias

1 Respuesta

Respuesta
1
Con este procedimiento haces lo que quieres.
Un saludo
Option Explicit
Sub eliminaLineasDuplicadasColumnaA()
    ReDim matValoresA(1 To 65536) As Variant
    Dim nValoresA As Long
    Dim aux As Variant
    Dim i As Integer
    Dim nLin As Long
    nLin = 1
    nValoresA = 0
    ' Hacemos un bucle que dejará de dar vueltas cuando haya 10 celdas seguidas en
' la columna A que estén en blanco
    Do While Not hay10lineasEnBlanco(nLin)
        ' Leemos el contenido de la columna A
        aux = Cells(nLin, 1)
        ' Y lo buscamos entre los leidos hasta el momento
        For i = 1 To nValoresA
            If aux = matValoresA(i) Then Exit For
        Next i
        If i <= nValoresA Then
            ' El valor ya existe, tenemos que borrar la línea y probar
            ' de nuevo con el mismo número de línea
            Rows(Format$(nLin) & ":" & Format$(nLin)).Delete
          Else
            ' La celda no está repetida. Guardamos el valor y pasamos a la siguiente
            nValoresA = nValoresA + 1
            matValoresA(nValoresA) = aux
            nLin = nLin + 1
        End If
    Loop
    MsgBox "Proceso terminado"
End Sub
Private Function hay10lineasEnBlanco(ByVal nLin As Long) As Boolean
    ' Devuelve TRUE cuando hay 10 líneas que no tienen nada en la columna A
' y FALSE cuando alguna de las 10 líneas tiene algo
hay10lineasEnBlanco = (Cells(nLin, 1) = "") And _
                          (Cells(nLin + 1, 1) = "") And _
                          (Cells(nLin + 2, 1) = "") And _
                          (Cells(nLin + 3, 1) = "") And _
                          (Cells(nLin + 4, 1) = "") And _
                          (Cells(nLin + 5, 1) = "") And _
                          (Cells(nLin + 6, 1) = "") And _
                          (Cells(nLin + 7, 1) = "") And _
                          (Cells(nLin + 8, 1) = "") And _
                          (Cells(nLin + 9, 1) = "")
End Function
Funciona perfecto! Muchas gracias, y gracias por la rapidez. Abusando un poco más de ti me gustaría que me dijera como podría incluir ese código en la macro que ya tengo hecha. No soy capaz de integrarla sin que me de error...
Al final de tu macro, delante de la instrucción "End Sub" incluye una línea que ponga "eliminaLineasDuplicadasColumnaA".
Disculpa, tal vez no me expliqué bien. Quiero que realice la macro que tengo y que al finalizar realice esta, pero todo en la misma macro. Tal y como tu me has dicho da múltiples fallos. Si es demasiado complejo de hacer o lo que sea no importa, lo pondré en dos macros distintas, aunque ese no es el objetivo. Si es así dímelo para finalizar la pregunta. Un saludo, y muchas gracias
Si quieres añadir el código del procedimiento a otro, lo que tienes que copiar son las instrucciones que van entre 'Sub eliminaLineasDuplicadasColumnaA()' y el 'End Sub'. Estas líneas las tendrías que copiar delante de la instrucción 'End Sub' de tu procedimiento.
De todas formas, pienso que lo que buscas es que no aparezca este procedimiento en la lista de macros.
Si se trata de eso, es tan sencillo como poner 'Private Sub eliminaLineasDuplicadasColumnaA()' (poner la palabra private delante de la declaración). Poniendo esa palabra, el procedimiento se declara como privado y sólo es visible desde el módulo donde esté escrito.
Eso sí, el código del procedimiento 'eliminaLineasDuplicadasColumnaA' y de la función 'hay10lineasEnBlanco' tendrían que estar escritos en el mismo módulo que esté tu macro.
Supongo que es eso lo que quieres. Si no te queda exactamente como quieres no dudes en comentármelo y lo arreglamos (incluso si hace falta me lo envías por correo).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas