Cómo crear unas macro que detecte registros repetidos.

Necesito una macro en excel que detecte registros repetidos. Son 10 millones de registros en 4 columnas y filas interminables.

2 Respuestas

Respuesta
1

Este es un ejemplo de una macro que encuentra datos repetidos aunque solo aplica para la primera de 4 columnas, no especificas sobre cual columna quieres encontrar los repetidos o si es sobre las cuatro, tampoco especificas que quieres que la macro haga con la información repetida.

Sub busca_repetidos()
inicio = Timer()
Dim unicos As New Collection
Set datos = Range("b2").CurrentRegion
With datos
For i = 1 To .Rows.Count
    numero = .Cells(i, 1)
    On Error Resume Next
        unicos.Add numero, CStr(numero)
    On Error GoTo 0
Next i
repetidos = .Rows.Count - unicos.Count
fin = Timer()
tiempo = fin - inicio
MsgBox ("registros repetidos " & repetidos & _
" en " & .Rows.Count & " registros en " & tiempo _
& " segundos"), vbInformation, "AVISO"
End With
End Sub

En realidad quiero encontrar los repetidos de toda la hoja, es decir los repetidos de las 4 comumnas y las filas, si la macro puede diferenciar los repetidos o eliminarlos estaría bien. Muchas gracias

Prueba esta macro, primero eliminara los repetidos por columna y luego analizara cada fila para eliminar repetidos, en 300,000 registros tarda 13 segundos en un equipo antiguo para la cantidad de registros que manejas debe andar entre los 7 y 10 minutos el proceso.

Dim unicos As New Collection
Set datos = Range("b2").CurrentRegion
Set funcion = WorksheetFunction
With datos
    filas = .Rows.Count
´elimina informacion repetida en cada columna
    .RemoveDuplicates Columns:=Array(1)
    .RemoveDuplicates Columns:=Array(2)
    .RemoveDuplicates Columns:=Array(3)
    .RemoveDuplicates Columns:=Array(4)
    filas2 = .CurrentRegion.Rows.Count
    filasu = filas - filas2
   'busca los repetidos en cada fila, los marca y los borra
    Set datos = .CurrentRegion
    Set tabla = .Columns(.Columns.Count + 1).Resize(.Rows.Count, 1)
    matriz = tabla
    For i = 1 To filas2
        Set unicos = Nothing: x = 0
        For j = 1 To .Columns.Count
            numero = .Cells(i, j)
            On Error Resume Next
                unicos.Add numero, CStr(numero)
                If Err.Number > 0 Then x = x + 1
            On Error GoTo 0
        Next j
        matriz(i, 1) = x
    Next i
    Range(tabla.Address) = matriz
    Set datos = .CurrentRegion
    .Sort key1:=Range(.Columns(.Columns.Count).Address), order1:=xlAscending
    cuenta = funcion.CountIf(.Columns(.Columns.Count), 0)
    filas = .CurrentRegion.Rows.Count - cuenta
    .Rows(cuenta + 1).Resize(filas, .Columns.Count).Clear
End With
fin = Timer()
tiempo = fin - inicio
MsgBox ("terminado en " & tiempo & " segundos")
End Sub

Buenas noches me sale ese cuadro de error al aplicar la macro

Esta demasiado reducida la imagen no puedo ver que error aparece ni la línea que lo genera, si puedes vuelve a subirla más grande y también una captura de campaña de tus datos.

Dice: se ha producido el error 1004 en tiempo de ejecución. 

Error definido por la aplicación o el objeto

He probado y no funciona la macro me sale además del mensaje anterior, error de sintaxis

Como te mencione antes necesito ver una parte de tus datos y una imagen más clara del error o más bien de la línea donde te aparece el solo error 1004 no me dice mucho pueden ser infinidad de causas que lo provoquen.

Respuesta

¿Qué desea hacer con los registros repetidos?

1.- Contar cuantos repetidos hay. 2.- Copiar a otra hoja repetidos. 3.- Omitir repetidos, etc

De esa manera sera posible buscar una solución más rápida.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas