Como buscar datos y si hay duplicados concatenarlos separados con / con VBA

Necesito concatenar los resultados de busqueda de un articulo

Ya que se encuentran duplicados

Es posible traer de una hoja a otra pero concatenado

Ejemplo Teclado, usb, ram tienen mas de una zona y ubicacion

Y si no esta duplicado solo trae un solo resultado

Adjunto jpg

2 respuestas

Respuesta
3

Te anexo la macro.

En la "Hoja1" en la fila 1 pon tus encabezados, a partir de la fila 2 pon tus datos.

En la "Hoja2" quedarán los resultados

Sub Concatenar()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")    'hoja origen con datos
    Set h2 = Sheets("Hoja2")    'hora de resultados
    '
    h2.Cells.ClearContents
    h1.Rows(1).Copy h2.Rows(1)
    '
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("A").Find(h1.Cells(i, "A"), lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, "B") = h2.Cells(b.Row, "B") & " / " & h1.Cells(i, "B")
            h2.Cells(b.Row, "C") = h2.Cells(b.Row, "C") & " / " & h1.Cells(i, "C")
        Else
            u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
            h2.Cells(u2, "A") = h1.Cells(i, "A")
            h2.Cells(u2, "B") = h1.Cells(i, "B")
            h2.Cells(u2, "C") = h1.Cells(i, "C")
        End If
    Next
    MsgBox "Fin"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Concatenar
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Gracias! 

EXCELENTE MAESTRO 

Justo lo que necesitaba 

y preciso 

agradecido del tiempo invertido para una excelente respuesta 

saludos 

Respuesta
3

No me queda del todo claro lo que pides así que te envío un ejemplo de lo que creo que es: primero crea una lista así y corres la macro que se encuentra al final de la segunda imagen

este sera el resultado de correr la macro

y esta es la macro

Sub busqueda()
Set datos = Range("a4").CurrentRegion
Set funcion = WorksheetFunction
With datos
    f = .Rows.Count: c = .Columns.Count
    Set datos = .Rows(2).Resize(f - 1, c)
    .Sort _
        key1:=Range(.Columns(1).Address), order1:=xlAscending, _
        key2:=Range(.Columns(2).Address), order1:=xlAscending
        .Columns(c + 3).CurrentRegion.Clear
        Set lista = .Columns(c + 3).Resize(f - 1, c)
    With lista
        .Columns(1).Value = datos.Columns(1).Value
        .RemoveDuplicates Columns:=Array(1)
        Set lista = .CurrentRegion
        lf = .Rows.Count: lc = .Columns.Count
        For I = 1 To lf
            parte = .Cells(I, 1)
            cuenta = funcion.CountIf(datos.Columns(1), parte)
            fila = funcion.Match(parte, datos.Columns(1), 0)
            Set PARTES = datos.Rows(fila).Resize(cuenta)
            If cuenta = 1 Then
                .Cells(I, 2) = datos.Cells(I, 2)
                .Cells(I, 3) = datos.Cells(I, 3)
            Else
                For j = 1 To cuenta
                    part = PARTES.Cells(j, 2)
                    UBIC = PARTES.Cells(j, 3)
                    If j = 1 Then conca = part: LOCA = UBIC
                    If j > 1 Then conca = conca & "/" & part:   LOCA = LOCA & "/" & UBIC
                Next j
                .Cells(I, 2) = conca: .Cells(I, 3) = LOCA
            End If
        Next I
        .Columns(2).HorizontalAlignment = xlRight
        With .CurrentRegion
            .EntireColumn.AutoFit
            .Rows(0).Value = datos.Rows(0).Value
        End With
    End With
    .Sort _
        key1:=Range(.Columns(2).Address), order1:=xlAscending
End With
End Sub

¡Gracias! 

Grande maestro

lo que necesitaba funciona perfecto

gracias por el tiempo invertido 

agradecido

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas