¿Cómo extraer duplicados de una tabla en excel?

Tengo una tabla de la cual, quiero sacar los duplicados con varias condicionales

Es extraer los datos sin repetir pero si esta como pongo en la imagen si cambia la fecha que sea un dato aparte a los dos que coinciden

Y así sucesivamente si cambia o es diferente la columna A, B, C y G que sea un dato diferente arrojando esa información o caso contrario que sean como el ejemplo las 4 columnas iguales que sea un solo dato con toda esa información.

1 respuesta

Respuesta
1

¿La función quitar duplicados tildando los campos a validar no sirve para lo que necesitas?

Podría ayudar pero el inconveniente es que la tabla es cambiante, es por lo que ando buscando la forma de formularlo para así tener la información y no tener que hacer ese proceso

¿Te entiendo... una consulta cuando dices "Sacar" te refieres a eliminar esos duplicados?

Así es, pero requiero que tenga esas condiciones que es lo que no logro ya que en la imagen hay repeticiones de 3 veces o 4 pero he visto en la información que me envían suele repetirse hasta 30 veces la cual si un dato de las columnas cambia debo considerarlo como una información independiente

De acuerdo, Miguel prueba este código y me avisas, estoy tomando la premisa que indicas de las columnas (A-B-C-G), si los datos son idénticos en esas columnas, se los vuela.

Sub Elimina_Duplicados_2()

Dim FilasT
Dim Filas
Dim Dato1
Dim Dato2

Application.ScreenUpdating = False

Range("a2").Select

FilasT = Selection.CurrentRegion.Rows.Count
Filas = 2
y = 2

For Filas = 2 To FilasT
Dato1 = Range("A" & Filas) & Range("B" & Filas) & Range("C" & Filas) & Range("G" & Filas)

y = y + 1
For x = y To FilasT
Dato2 = Range("A" & x) & Range("B" & x) & Range("C" & x) & Range("G" & x)
If Dato2 = Dato1 Then
Range("a" & x).Select
Selection.EntireRow.Delete
x = x - 1
FilasT = FilasT - 1
Else
End If
Next

Next

End Sub

Que bien si esta perfecto, solo una duda más es posible adicionar en el script un contador o en otras palabras un historial de lo que borro colocando una cantidad por ejemplo en la imagen coloque 3 pero cambia la fecha que en la columna I coloque 2 de lo eran

Creo que si se puede, tu quieres que escriba el numero 2 en la celda "I2", ¿por qué fueron 2 los que eliminó?

Así es si elimina 2 que coloque eso o solo un total de los repetidos, ya que lo estaba haciendo con fórmula pero al correr el script que hiciste favor de ayudarme pss me borra la cantidad que tenia es por eso que quiero ver si hay forma de conservar el total que tenia antes de borrar los duplicados

Te entiendo dejame ver... y te aviso

Oh! Muchísimas gracias!

Miguel, duplique el bucle que uso para eliminar, es decir copie y pegue, pero en vez de eliminar y sumar 1, estoy contando los registros de mayor a menor en el orden que los consiga hacia abajo de manera que el script no recorra la base de datos nuevamente, como el primer registro que consigo es el que queda, el resultado es la cantidad de registros que se eliminaron, prueba el código, valida los resultados y me avisas...

Sub Elimina_Duplicados_2()

Dim FilasT
Dim Filas
Dim Dato1
Dim Dato2
Dim Contar

Application.ScreenUpdating = False

Range("a2").Select

FilasT = Selection.CurrentRegion.Rows.Count
Filas = 2
y = 2

For Filas = 2 To FilasT

Dato1 = Range("A" & Filas) & Range("B" & Filas) & Range("C" & Filas) & Range("G" & Filas)

y = y + 1
For x = y To FilasT

Dato2 = Range("A" & x) & Range("B" & x) & Range("C" & x) & Range("G" & x)
If Dato2 = Dato1 Then
Contar = Contar + 1
Else
End If
Next
Range("I" & Filas) = Contar
Contar = 0
Next

For Filas = 2 To FilasT
Dato1 = Range("A" & Filas) & Range("B" & Filas) & Range("C" & Filas) & Range("G" & Filas)

y = y + 1
For x = y To FilasT

Dato2 = Range("A" & x) & Range("B" & x) & Range("C" & x) & Range("G" & x)
If Dato2 = Dato1 Then
Range("a" & x).Select
Selection.EntireRow.Delete
x = x - 1
FilasT = FilasT - 1
Else
End If
Next

Next

End Sub

Disculpa se me olvidó reiniciar dos variables, aqui te dejo el código corregido:

Sub Elimina_Duplicados_2()

Dim FilasT
Dim Filas
Dim Dato1
Dim Dato2
Dim Contar

Application.ScreenUpdating = False

Range("a2").Select

FilasT = Selection.CurrentRegion.Rows.Count
Filas = 2
y = 2

For Filas = 2 To FilasT

Dato1 = Range("A" & Filas) & Range("B" & Filas) & Range("C" & Filas) & Range("G" & Filas)

y = y + 1
For x = y To FilasT

Dato2 = Range("A" & x) & Range("B" & x) & Range("C" & x) & Range("G" & x)
If Dato2 = Dato1 Then
Contar = Contar + 1
Else
End If
Next
Range("I" & Filas) = Contar
Contar = 0
Next

Filas = 2
y = 2

For Filas = 2 To FilasT
Dato1 = Range("A" & Filas) & Range("B" & Filas) & Range("C" & Filas) & Range("G" & Filas)

y = y + 1
For x = y To FilasT

Dato2 = Range("A" & x) & Range("B" & x) & Range("C" & x) & Range("G" & x)
If Dato2 = Dato1 Then
Range("a" & x).Select
Selection.EntireRow.Delete
x = x - 1
FilasT = FilasT - 1
Else
End If
Next

Next

End Sub

¡Muchísimas Gracias!, me esta ayudando bastante era lo que buscaba

Saludos!

Que bueno, valida y cualquier cosa me avisas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas