¿Cómo encontrar valores iguales en columna de Excel y copiar filas de coincidentes?

Ante una determinada columna identificada por documentos de identidad (DNI) se le asigna a cada uno de estos diferentes productos y cantidad. El problema es que en la columna de DNI se repiten algunos de ellos, ya que pueden tener varios productos y de ellos, diferentes cantidades. Yo desearía que con una macro me de el listado de DNI (sin repetidos) y a la derecha de cada uno de ellos el listado de productos y cantidades que posee.

Escribo abajo como es lo que tengo y como deseo que se vea:

DNI Producto Cantidad

1 papel 12

1 escoba 7

3 bolsa 23

3 PC 11

3 galleta 7

4 auto 2

Quedaría que en otra hoja, aparezca así:

DNI Prod. 1 Canti. 1 Prod. 2 Canti. 2 Prod. 3 Canti. 3 Prod. 4 Canti.4

1 papel 12 escoba 7

3 bolsa 23 PC 11 galleta 7

4 auto 2

Al momento logré hacer lo anterior mediante fórmulas, pero me lleva mucho tiempo ya que son muchas columnas agregadas, con el agregado de copiar luego como valores y quitar filas duplicadas. A eso hay que sumarle que lo tengo que repetir semana tras semana, por actualización de los datos, así que apreciaría mucho la colaboración de un experto.

1 respuesta

Respuesta
1

Aquí tienes la solución, sigue mis instrucciones:

Vamos a poner tus datos iniciales en el rango A1:C7. Después ejecutas esta macro y todo listo.

Sub organizar()
Range("a2").Select
fila = 2
columna = 5
Do While ActiveCell.Value <> ""
valor = ActiveCell
contarsi = Application.WorksheetFunction.CountIf(Columns(1), valor)
For x = 1 To contarsi
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 3)).Copy Destination:=Cells(fila, columna)
columna = columna + 3
ActiveCell.Offset(1, 0).Select
Next
columna = 5
fila = fila + 1
Loop
Range("e1").CurrentRegion.Select
tope = Selection.Columns.Count
veces = tope / 3
Range("a1:c1").Copy
Range("e1").Select
For p = 1 To veces
Selection.PasteSpecial Paste:=xlAll
Selection.Offset(0, 3).Select
Next
For Each celda In Range("f1:" & Range("mm1").End(xlToLeft).Address)
If ucase(celda.Value) = "DNI" Then
celda.EntireColumn.Delete
End If
Next
prod = 1
cant = 1
For Each celda In Range("f1:" & Range("mm1").End(xlToLeft).Address)
If ucase(celda.Value) = "PRODUCTO" Then
celda.Value = "PRODUCTO" & prod
prod = prod + 1
End If
If ucase(celda.Value) = "CANTIDAD" Then
celda.Value = "CANTIDAD" & cant
cant = cant + 1
End If
Next
Range("a1").Select
End Sub

recuerda finalizar y puntuar

¡Admirable la velocidad en contestar!

Una cosa más, es posible que el DNI (la primera columna) no se siga repitiendo. Es decir, que aparezca solo la primera vez, ya que luego es el mismo dato repetido, siendo lo importante los diferentes productos y cantidad.

Saludos y muchas gracias nuevamente!

Si has seguido los pasos como te he indicado solo tendrás una columna de DNI. La macro está preparada para dejar solo una columna par el DNI.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas