Concatenar varias celdas con macro

Quisiera concatenar varias celdas en una, el punto es que la columna que tengo va desde F45 y es variable hasta donde termina como puede terminar en F46, puede terminar en F70.

Estaba haciendo esto, pero aquí solo concatena 3 celdas

m = 45
 Range("F" & m).Select
 Do While ActiveCell.Value <> ""
 Range("F" & m).Select
 ActiveCell.FormulaR1C1 = "=CONCATENATE(R[m]C[2], "" / "", R[m]C[2], "" / "", R[m]C[2])"
 Range("D6").Select
 m = m + 1
 Loop

1 Respuesta

Respuesta
2

Es un poco difícil seguir la macro si no se sabe lo que hay que en las celdas y a dónde se quiere llegar

¿Puedes mandarme el fichero?

Mi correo es:

[email protected]

Pon como asunto el título de la pregunta y como nombre del libro algo alusivo como

ConcatenarVariasCeldas.XLSM

Ya te la mande!! Muchas gracias.

Lo que entiendo que quieres hacer es poner en la celda actual una función que encadene los datos de F45 hacia abajo.

Esta seria la macro similar a lo que tenías

Sub AsignarFormula()
Dim Formul As String
If [F45] <> "" Then
   Formul = "=Concatenate(F45"
Else
   Exit Sub
End If
m = 46
While Cells(m, "F") <> ""
   Formul = Formul & "," & Chr(34) & " / " & Chr(34) & ",F" & m
   m = m + 1
Wend
ActiveCell.Formula = Formul & ")"
End Sub

Ahora bien, cada vez que cambies valores de la lista que hay en F45 se quedará desfasada la fórmula y tendrás que volver a ejecutarla asegurándote que tienes seleccionada la casilla donde debe ponerse la fórmula.

Algo mejor sería si la casilla de la fórmula fuera fija. Entonces podrías hacer una macro que se ejecutara al modificare casillas y si se modificaran en la columna F de la fila 45 para abajo podrías hacer que se ejecutara la macro de nuevo y quedaría actualizada la casilla de la fórmula. Esto no puede hacerse tal como está ahora porque se pondría la fórmula en la casilla actual que sería donde estamos escribiendo.

Si quieres puedo hacer eso, tu me dices la casilla fija donde irá la fórmula y hacemos la macro para que ponga la fórmula en esa casilla y la macro Change para que se actualice la formula en caso de cambiar datos por la zona de la lista.

Si, de hecho en donde te puse la celda roja (D5) esa será siempre fija. Las otras que están en la parte de abajo, esas siempre se tendrán que concatenar en la D5, y como dices que si cambian valores pues lo existentes se agregaran a la D5 solamente.

Como te digo pueden ser como pueden ser en la celda solo una celda que se copia a otra, como puede que sean desde 2 concatenaciones o hasta 5, o 6, hasta que encuentre una celda vacía.

Muchas gracias

Saludos

Pues entonces la macro que debes crear en un módulo que insertes será:

Sub AsignarFormula()
  'Metodo abreviado CTRL + MAYUS + F
  Dim Formul As String
  If [F45] <> "" Then
    Formul = "=Concatenate(F45"
    m = 46
    While Cells(m, "F") <> ""
      Formul = Formul & "," & Chr(34) & " / " & Chr(34) & ",F" & m
      m = m + 1
    Wend
    [D5].Formula = Formul & ")"
  End If
End Sub

Como puedes ver la he simplificado un poco y funciona igual, salvo que la fórmula va fija a la celda D5.

Y esta otra en la hoja "Sheet1"

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Row >= 45 And Target.Column = 6 Then
    Call AsignarFormula
  End If
End Sub

Ahora te mando el fichero. También he asignado la macroo a

CTRL+MAYUS+F para que sea más cómodo usarla.

Ojala te sirva! Ya me diras. Y si ya está bien no olvides puntuar.

¡Ah, se me olvidaba!

Si después de finalizar la pregunta tuvieras alguna duda o algo más que resolver puedes hacerme la pregunta en Matemáticas en Ciencias e Ingeniería, donde estoy disponible.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas