Saltar al contenido

Necesito macro para buscar duplicidades de datos de una hoja y la copie en otra con la linea complet


Recommended Posts

publicado

Hola buenas y gracias por anticipado, vamos a ver si me explico y me podeis entender, trabajo con una hoja en la

cual cuenta con 16 columnas, y toda cuando esta completa se llenaran asi como 45000 lineas, lo que yo necesito

es buscar duplicidades entre toda la hoja y copiar las lineas completas en otra hoja, para detectar el siguiente criterio de duplicidad:

1.- que detecte las columnas C,D,E (nombre apellido1 apellido2 ) que coincida con todas las filas y las copie en otra hoja, llamada duplicidades, pero con la linea completa desde columnas A hasta P de las mismas lineas

2.- que detecte las columnas F,G,H (dni,nie,pasaporte) que esten duplicadas y copie todas en la oja duplicidades, pero tambien con la linea completa desde las columnas A hasta la P de las mismas lineas

digamos que cuando detecte una de las dos condiciones copie y pegue la linea completa en la hoja duplicidades, tanto la linea original como todas las detectadas que lo cumplen.

subo la hoja original para que os agais una idea de como es el formato, lo que intento es buscar duplicidades de la hoja 1 con las dos condiciones explicadas y las copie en otra hoja para controlar las repeticiones, y avisarles de que no pueden

inscribirse mas de una vez, pues ya que controla esta hoja mas de cien entidades.

muchas gracias y espero vuestra contestacion, imagino que seria hacer un macro con un boton para que empezara a buscar.

-----------------------------------------------------------------------------

el macro ya me lo confecciono higinio caceres, gracias, pero ahora tengo otro problema, al ejecutarlo me da desbordamiento, como explico abajo al introducirle las 35000 lineas en la hoja1,el error lo da en la linea del macro:

mD = Range ("A4") . CurrentRegion

LISTADO USUARIOS.xls

publicado

gracias amigo higinio por dedicar tu tiempo a ayudar a los que vamos justitos en excel, e probado el excel tuyo retocado con el macro , le he agregado unas 800 lineas a las hoja 1 (altas), he utilizado el ultimo el que tiene el boton, le e dado para ejecutar el macro, y ocurre una cosa la condicion 2 la hace perfecta, pero la condicion 1, que deberia de digamos juntar las columnas para formar el nombre con los apellidos y ver si existe otro en todas las lineas que coincidan, si coincidiera alguna linea con el mismo nombre apellido1 apellido2 deberia de copiar ambos o los que las cumplen la igualdad en la hoja duplicados, pero lo que hace es copiar todas las lineas de la hoja 1 en la hoja 2, pero todas, no las duplicadas, y lo que necesito es solo las duplicadas, lo que observo es que copia todas las que no tienen nada en las columnas f,g y h.

no se si me e explicado bien, de antemano muchas gracias por tu talento y tiempo, y a ver si puedes darle un vistazo, espero tu contestacion. saludos.

publicado

Josebacoldo no seria mejor ver si el DNI es el que se repite en vez del nombre?

por lo menos en Chile, el RUT (simil al DNI) es el que manda (puede darse el caso que existan personas con los mismos nombres y apellidos pero distinto RUT (DNI).

Revisando el archivo higinio esta correcto, no deberia producirse el desbordamiento...

publicado

Gracias por contestar chernandez, a lo que me comentas necesito hacer el cruce de datos, por que en ocasiones no

hay dni y coinciden nombre y apellidos, bien por estar dados de alta en otro sitio o bien por que falta el numero de

los documentos, rellenado la hoja que me ha confeccionado higinio con 36000 lineas, me da el siguiente error

se ha producido error 6 en tiempo de ejecucion desbordamiento , en esta linea del macro:

mD = Range("A4").CurrentRegion

un detalle si entro por ejemplo solo 30000 lineas si funciona, un saludo y espero tu contestacion. gracias amigo

como el archivo no me lo deja subirlo por ser mas grande de lo permitido, lo e colgado te doy el enlace para que lo veas tu y mires el error

la hoja esta alimentada con 35000 lineas, por favor , y mil gracias.

https://mega.co.nz/#!JgVT0A4B!BqgUAzRTBb7c4oX4seyxFignDaMj4wczrQDKE42CVxU

publicado

el prblema del desbordamiento se da por una razon en particular, debes tener un contador o variable que recorra y cuyo valor resulta ser mayor que 32000 y alguito.. que es el valor maximo de una variable de tipo integer.. en lo personal alguna vez se me cambiaron los datos que una macro evaluaba en la hoja de base de datos por fechas y eso provoco el desbordamiento, ten en cuenta si tal vez la macro se desborda en una fecha.en todo caso la solucion es darle un rango de aplicacion mas amplio a la variable que se desborda estableciendo la no como integer que es como vba la aplica por defecto si no esta definida y bueno como ibamos..... quedaria asi despues de iniciar el sub

 dim mivariableesesta as long

publicado

gracias davidlejoms primero por contestarme , mira te dejo la macro para que la veas , ya habiendo modificado esa variable a long, lo pruebo y te digo, muchisimas gracias , te cuento ... (mil gracias)

Option Explicit

Option Base 1

Sub x()

Dim mD As Long, d, e, mS(), s

Sheets("DUPLICADOS").Range("A:IV").ClearContents

mD = Range("A4").CurrentRegion

ReDim Preserve mD(UBound(mD, 1), UBound(mD, 2) + 3)

For d = 1 To UBound(mD, 1)

mD(d, 17) = Trim(mD(d, 3)) & Trim(mD(d, 4)) & Trim(mD(d, 5))

mD(d, 18) = Trim(mD(d, 6)) & Trim(mD(d, 7)) & Trim(mD(d, 8))

mD(d, 19) = "N"

Next

mD(1, 19) = "S"

mD(2, 19) = "S"

mD(3, 19) = "S"

For d = 4 To UBound(mD, 1)

For e = d + 1 To UBound(mD, 1)

If mD(d, 19) <> "S" Then

If mD(d, 17) = mD(e, 17) Or mD(d, 18) = mD(e, 18) Then

mD(d, 19) = "S"

mD(e, 19) = "S"

End If

End If

Next

Next

d = 0: e = 0

ReDim mS(UBound(mD, 1), UBound(mD, 2) - 3)

For d = 1 To UBound(mD, 1)

If mD(d, 19) = "S" Then

e = e + 1

For s = 1 To UBound(mD, 2) - 3

mS(e, s) = mD(d, s)

Next

End If

Next

Sheets("DUPLICADOS").Range("A1:P" & e) = mS

- - - - - Mensaje combinado - - - - -

gracias davidlejoms primero por contestarme , mira te dejo la macro para que la veas , ya habiendo modificado esa variable a long, lo pruebo y te digo, muchisimas gracias , te cuento ... (mil gracias)

ya lo he provado y da otro error en la linea:

ReDim Preserve mD(UBound(mD, 1), UBound(mD, 2) + 3)

error de compilacion se esperabauna matriz :nonchalance:

Option Explicit

Option Base 1

Sub x()

Dim mD As Long, d, e, mS(), s

Sheets("DUPLICADOS").Range("A:IV").ClearContents

mD = Range("A4").CurrentRegion

ReDim Preserve mD(UBound(mD, 1), UBound(mD, 2) + 3)

For d = 1 To UBound(mD, 1)

mD(d, 17) = Trim(mD(d, 3)) & Trim(mD(d, 4)) & Trim(mD(d, 5))

mD(d, 18) = Trim(mD(d, 6)) & Trim(mD(d, 7)) & Trim(mD(d, 8))

mD(d, 19) = "N"

Next

mD(1, 19) = "S"

mD(2, 19) = "S"

mD(3, 19) = "S"

For d = 4 To UBound(mD, 1)

For e = d + 1 To UBound(mD, 1)

If mD(d, 19) <> "S" Then

If mD(d, 17) = mD(e, 17) Or mD(d, 18) = mD(e, 18) Then

mD(d, 19) = "S"

mD(e, 19) = "S"

End If

End If

Next

Next

d = 0: e = 0

ReDim mS(UBound(mD, 1), UBound(mD, 2) - 3)

For d = 1 To UBound(mD, 1)

If mD(d, 19) = "S" Then

e = e + 1

For s = 1 To UBound(mD, 2) - 3

mS(e, s) = mD(d, s)

Next

End If

Next

Sheets("DUPLICADOS").Range("A1:P" & e) = mS

gracias

  • 1 year later...
publicado

HOLA NECESITO QUE ME AYUDEN NECESIO BUSCAR DUPLICADOS DE USUARIOS POR NDI NOMBRES, TIPO DE PERSONA, UNIDAD EJECUTORA, COMO LO PODRIA HACER Y DE AHI FILTRARLOS, OJALA ME AYUDEN, NO PUEDO SUBIR EL ARCHIVO

publicado

buenas soy nuevo en el foro y quisiera que me ayuden con un archivo en donde necesito verificar la duplicidad de la persona, , ubicandolo por nombres, apellidos, tipo de personal, unidad ejecutora, dni y nro de documento, son de varias unidades distintas, pero no puedo filtrar todo, aqui le anexo el archivo

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.