Concatenar cada celda de rango con macros en excel

Quisiera concatenar en las celdas donde se encuentre( por valor o en blanco), todo se efectúa en la misma columna en este caso "D"

Ej: en la celda D2 tengo el valor por o esta en blanco

En la celda D3 esta el valor "peras"

En la celda D4 esta el valor "uvas"

En la celda D5 esta en blanco,

Entonces en la celda D2 debe quedar así (peras, Uvas) palabras separadas por coma,

Así sucesivamente en toda la columna, los rangos o cantidad de filas son diferentes.

Todo con vba

2 respuestas

Respuesta
3

Te anexo la macro

Sub concatenar()
'Por.Dante Amor
    For i = 3 To Range("D" & Rows.Count).End(xlUp).Row
        cad = cad & Cells(i, "D") & "; "
    Next
    If cad <> "" Then
        Range("D2") = Left(cad, Len(cad) - 2)
    End If
End Sub

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

Gracias Dante, 

Efectivamente la macro hace parte de lo solicitado, pero requiero que haga esta operación, varias veces recorriendo la columna.

ya que los rangos cambian, el debe concatenar en las celdas donde se encuentre determinado valor, y este valor es el mismo siempre.(este valor se encuentra repetido en la columna muchas veces, pero separado por un numero diferente de filas,

entonces donde encuentre (Ej: "Hola" celda "A2"); concatene todas las palabras de las celdas inferiores hasta cuando encuentre nuevamente la palabra "Hola" estas palabras se concatenan en la celda "A2" separadas por comas, después busque el siguiente "hola" y haga los mismo, buscando esta palabra en toda la columna hasta que no encuentre mas esta palabra.

Gracias 

La macro hace todo lo solicitado. Ya que no comentaste esto: "este valor se encuentra repetido en la columna muchas veces, pero separado por un numero diferente de filas"

Si puedes poner 2 imágenes, una con los valores originales y otra con la concatenación que quieres como resultado.

En la columna "C" se encuentra el valor n que tengo para identificar las celdas resaltadas, que es donde se debe concatenar la información de los rangos, en algunos casos pueden ir 2 filas seguidas, por eso coloque n y n1 donde la n que esta arriba es igual al n1 de abajo, osea el valor concatenado.

Te anexo la nueva macro. Cambia "n" por la condición.

Sub Concatenar_Datos()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    cond = "n"
    '
    Set h = ActiveSheet
    Set r = h.Columns("C")
    'Limpiar
    Set b = r.Find(cond, lookat:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            b.Offset(0, 1).Value = ""
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    Set b = r.Find(cond, lookat:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        ini = b.Row
        Do
            'detalle
            fila = b.Row + 1
            cad = ""
            Do While h.Cells(fila, "D") <> ""
                cad = cad & Cells(fila, "D") & ", "
                fila = fila + 1
            Loop
            If cad <> "" Then
                b.Offset(0, 1) = Left(cad, Len(cad) - 2)
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    u = h.Range("D" & Rows.Count).End(xlUp).Row
    On Error Resume Next
    With Range("D" & ini & ":D" & u)
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[1]C"
        .Copy
        .PasteSpecial Paste:=xlPasteValues
    End With
    Application.ScreenUpdating = True
    Application.CutCopyMode = True
    Range("C2").Select
    MsgBox "Fin"
End Sub

No entendí lo de la "n" y la "n1", no sé si tienes puras "n" o vas a tener "n" y "n1"

Prueba la macro que te estoy enviando, suponiendo que tienes puras "n"; y me avisas.


Pero vamos a hacer algo, de lo contrario no vamos a acabar, ya que cada vez solicitas algo nuevo; y con mucho gusto te ayudo con todas tus peticiones. Valora esta respuesta y crea una nueva pregunta. Ahí me describes con detalle lo que necesitas.

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas