Macro para concatenar varias columnas

Quisiera me pudieran ayudar necesito unir las columnas A, B, C, y colocarlo en la I y después sunir las E, F y colocarlo en la H con valores variados en las columnas colocando las siglas DC en cada concatenación tengo esto pero solo lo hace con un rango

Private Sub CommandButton1_Click()
Range("B2").Select
Do While ActiveCell.Value <> ""
fila = ActiveCell.Row
For Each Celda In Range(ActiveCell, ActiveCell.Offset(0, 5))
If Celda.Column = 1 Then
Celda.NumberFormat = "@"
Celda.Value = Application.WorksheetFunction.Text(Celda.Value, "TO")
'celda.Value = Replace(celda.Value, ".", ",")
End If
lista = lista & "" & Celda.Value
Next
Cells(fila, 9).Value = lista
ActiveCell.Offset(1, 0).Select
lista = ""
Loop
End Sub

1 Respuesta

Respuesta
1

Hay detalles poco claros en tu macro.

- Si necesitas concatenar col A:C debes recorrer la col A, en lugar de B. Además porque en algunas líneas evalúas si estás en columna 1.

Range("A2").Select
Do While ActiveCell.Value <> ""

- Si solo necesitas que en col vayan las col A:C entonces ajusta aquí donde el Offset llegará hasta 2:

For Each Celda In Range(ActiveCell, ActiveCell.Offset(0, 2))

No me quedó claro dónde se agrega la sigla DC...

Y luego repetir el bucle para cada celda en rango E:F.

Si te presenta alguna dificultad avisame y dejame una imagen de las 1ras col para ver si puede recorrer la A, considerando que se detendrá al encontrar una celda vacía.

Buen día esto es lo que requiero que requiero que haga la macro ya que al poner la función concatenar y no tener registro me sale TO unicamente en la columna donde la concateno.

Esta sería entonces la macro. Está desarrollada a partir de la ubicación de datos según imagen.

Estoy considerando que lo que llamas vacías en realidad tienen 'coma' ... reemplaza ese caracter por punto o lo que tengas allí.

Private Sub CommandButton1_Click()
'x Elsamatilde
'se recorre la col A desde fila 3 hasta encontrar celda vacía
Range("A3").Select
Do While ActiveCell.Value <> ""
    fila = ActiveCell.Row
    If ActiveCell.Value <> "," Then
        lista = "TO" & ActiveCell & ActiveCell.Offset(0, 1)
    Else
        'celda.Value = Replace(celda.Value, ".", ",")
        lista = ActiveCell
    End If
    'coloca cadena en col G
    Cells(fila, 7).Value = lista
    lista = ""
    'SE PASA EL 2DO GRUPO
    If ActiveCell.Offset(0, 3) <> "," Then
        lista = ActiveCell.Offset(0, 3) & ActiveCell.Offset(0, 4)
    Else
        'celda.Value = Replace(celda.Value, ".", ",")
        lista = ActiveCell.Offset(0, 3)
    End If
    'coloca cadena en col H
    Cells(fila, 8).Value = lista
    lista = ""
ActiveCell.Offset(1, 0).Select
Loop
End Sub

La macro No asume que toda la fila esté vacía, sino que algunas pueden tener datos en las 1ras col y en las otras no... como para cubrir cualquier posibilidad, tal como se aprecia en la imagen.

También podrías haber utilizado esta fórmula en col G:

=SI(A3=",";A3&B3;"TO"&A3&B3)

y esta en col H:   =SI(D3=",";D3;D3&E3)

Nota: estoy utilizando pto y coma como separadores y 'coma' como contenido de las celdas vacias.

¡Gracias! Muchas gracias Elsa esta genial 

Elsa abusando de tus consejos me puedes indicar como seria la forma en que si la columna E fuera un numero este al concatenar con la columna DE quedará de la siguiente forma

D   E                                              H

D   2           concatenada seria  D002

Es decir agregar dos ceros en automático.

D 12 concatenada seria D012

Saludos

Busca esta sección del código y deja la instrucción en negrita:

'se pasa el 2do grupo
If ActiveCell.Offset(0, 3) <> "," Then
lista = ActiveCell.Offset(0, 3) & Format(ActiveCell.Offset(0, 4), "000")
Else

'.. sigue

Sdos!

Y con fórmula sería:

=SI(D3=",";D3;D3&TEXTO(E3;"000"))

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas