Extraer datos repetidos de una hoja a otra

Tengo una llamada "datos" con varios registros que son agrupados de acuerdo aun identificador de una columna llamada código, por ejemplo:

Código nombre prod valor

C001 nomA sofá 500

C001 momA sillón 600

C002 nomB regla 100

C002 nomB lápiz 50

Los mismos se van ingresando de un formulario en la hoja "datos"

La idea es poder filtrar en otra hoja los datos únicos de los campos "código" y "nombre" y los mas importante es que se vallan ingresando de acuerdo al orden como se ingresen en la hoja "datos". Ejemplo:

Código nombre
C001 nomA
C002 nomB

C003 nomC

... ...

... ...

Ante todo que tengan una feliz navidad.

1 respuesta

Respuesta
3

Te dejo un vídeo, para que realices una tabla dinámica, con ella obtienes los datos como los necesitas.

https://www.dropbox.com/s/hgzyybegpgzyaam/tabdin.avi

Saludos. Dam

Si es lo que necesitas.

Gracias por la respuesta y por el video muy ilustrativo, de hecho esa fue la primera idea que tuve, lo que pasa es que con este método hay un inconveniente: al agregar el mismo código pero con nombre diferente la tabla automáticamente lo asocia al orden en que se ingreso el código duplicado, ejemplo(quedaría asi en la tabla dinámica con código duplicado):

código nombre
c001 nomA
nomD
c003 nomC

Nota: hay que resaltar que el código c001 lo ingrese último y sin embargo aparece en la posición 2 cuando debería estar al ultimo (aunque sea duplicado). Espero poder realizarlo con macros para no tener este inconveniente con la tabla dinámica y poder ayudarme, gracias.

ejemplo(como quedaría)

código nombre
c001 nomA
c002 nomB
c001 nomC

Pero ya no entendí, si en este último ejemplo agregas otro código

Código nombre

C001 nomA

C002 nomB

C001 nomC

C001 nomA

¿Cómo quedaría?

Hola, agradeciendo por tu pronta respuesta, en este caso si la hoja "datos" tuviera estos registros que me propones pero que donde los duplicados esten juntos:

código nombre
c001 nomA ---> valor a tomar en cuenta en la otra hoja

c001 nomA ---> no se toma por ser duplicado.
c002 nomB ---> valor a tomar en cuenta en la otra hoja
c001 nomC ----> valor a tomar en cuenta porque tiene otro nombre y esta como ultimo.

Al realizar la tabla dinámica quedaría de esta manera:

Rótulos de fila nombre

c001 nomA

nomC ---> falta el código que no aparece por quitar subtotales.

c002 nomB ---> Sin embargo yo no lo ingrese ultimo pero la tabla asi lo propone.

Disculpa si no fui claro en mi propuesta pero he tratado de hacer este ejemplo con macros para de alguna manera filtrar los contenidos duplicados y quedar de esta manera.

código nombre
c001 nomA
c002 nomB
c001 nomC

Muchas gracias.

Te anexo la macro.

Suponiendo que el código está en la columna A y el nombre en la columna B y que la hoja destino se llama hoja2.

En la hoja destino "hoja2", los datos se van a poner, el código en la columna A y el nombre en la columna B, si son otros datos y necesitas ayuda para cambiarlos en la macro, envíame los valores correctos y corrijo la macro.

Sub numeros()
'Pone códigos únicos en otra hoja
'Por.Dam
Dim encontrado As Boolean
Set h1 = Sheets("datos")
Set h2 = Sheets("Hoja2")
h2.Cells.Clear
h1.Select
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
    encontrado = False
    For j = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "A") = h2.Cells(j, "A") _
            And h1.Cells(i, "B") = h2.Cells(j, "B") Then
            encontrado = True
        End If
    Next
    If encontrado = False Then
        h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "A")
        h2.Range("B" & h2.Range("B" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "B")
    End If
Next
h2.Select
MsgBox "Proceso terminado", vbInformation, "Códigos"
End Sub

Realiza tus pruebas y me comentas.

Saludos. Dam
Si es lo que necesitas.

Tras realizar algunas modificaciones logre extraer mas campos pero aun tengo algunas dudas al respecto y son las siguientes:

-se podra modificar la macro para que el codigo no afecte a otras columnas que contengan datos sin que las limpie?

-que pueda modificar codigo para escoger que columnas pasen a la otra hoja?

-si es una cantidad enorme de registros y el ciclo correria desde el inicio, habria un inconveniente en el rendimiento? (ejemp. 4000 reg) y si se podria pasar solo datos nuevos a la otra hoja.

Agradeciendote por la respuesta y por la genialidad del codigo brindado que me dio nueva perspectiva.

Te adjunto el codigo que modifique para añadir el encabezado y otras columnas.

Sub numeros2()
Dim encontrado As Boolean
Set h1 = Sheets("datos")
Set h2 = Sheets("Hoja1")
h2.Cells.Clear
h1.Select
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
 encontrado = False
 For j = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
 If h1.Cells(i, "A") = h2.Cells(j, "A") _
 And h1.Cells(i, "B") = h2.Cells(j, "B") _
 And h1.Cells(i, "C") = h2.Cells(j, "C") _
 And h1.Cells(i, "D") = h2.Cells(j, "D") _
 And h1.Cells(i, "E") = h2.Cells(j, "E") _
 And h1.Cells(i, "F") = h2.Cells(j, "F") Then
 encontrado = True
 End If
 Next
 If encontrado = False Then
 h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "A")
 h2.Range("B" & h2.Range("B" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "B")
 h2.Range("C" & h2.Range("C" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "C")
 h2.Range("D" & h2.Range("D" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "D")
 h2.Range("E" & h2.Range("E" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "E")
 h2.Range("F" & h2.Range("F" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "F")
 End If
Next
h2.Select
 Range("A1").Value = "Codigo"
 Range("B1").Value = "Cliente"
 Range("C1").Value = "Producto"
 Range("D1").Value = "Material"
 Range("E1").Value = "Cantidad"
 Range("F1").Value = "Fecha"
 Range("A1:F1").Select
 Selection.Font.Bold = True
 Selection.HorizontalAlignment = xlCenter
 Selection.End(xlDown).Select
MsgBox "Proceso terminado", vbInformation, "Códigos"
End Sub

Si la respuesta inicial fue contestada, te voy a pedir un enorme favor, podrías finalizar esta pregunta y crear una nueva para cada duda que tengas. Gracias

Te adelanto lo siguiente:

1. Si se puede modificar la macro para que no afecte otras columnas que tengan datos.

2. Si puedes modificar el código para escoger las columnas

3. Si hay inconveniente en el desempeño, pero con 4000 registros no lo creo, además depende de la capacidad de tu máquina en cuanto a memoria y procesadores.

Saludos. Dam

Muchas gracias por tus respuestas y en lo pronto estaré creando las preguntas de las dudas que te comente anteriormente, saludos y buen dia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas