En ambos casos, cuando queremos unir valores de varias celdas, se trata de una tarea tediosa, en particular cuando queremos usar un separador entre los textos.
UNIRCADENAS() permite definir el separador e ingresar un rango de celdas lo cual facilita enórmemente la tarea. El problema es que esta función está disponible sólo para los usuarios de Excel 365 (creo que hasta hoy Microsoft no ha actualizado la versión stand-alone de Excel 2016).
La solución para los usuarios de versiones anteriores es programar un función definida por el usuario (UDF) o una macro.
La ventaja de la función UDF es que se actualizará automáticamente con cada cambio en alguna de las celdas del rango; la desventaja es que puede afectar la velocidad de recálculo del cuaderno, en particular si usamos muchas de estas funciones.
La ventaja de la macro es que no afectará la velocidad de recálculo del cuaderno, pero tendremos que activarla cada vez que efectuemos un cambio en los valores del rango.
Publico aquí ambos códigos que sugiero guardar en el cuaderno PERSONAL de manera que puedan ser usados en cualquier cuaderno.
Función UDF Unir_Cadenas
Function Unir_Cadenas(varSep As Variant, rngVals As Range)
Dim strTemp As String
Dim rngCell As Range
For Each rngCell In rngVals
strTemp = strTemp & rngCell & varSep
Next rngCell
Unir_Cadenas = Mid(strTemp, 1, Len(strTemp) - 1)
End Function
Una vez guardado el código usamos el asistente de fórmulas para activar la función
Y definimos el separador y el rango de celdas que contiene los valores a unir
Si queremos un espacio como separador, pondremos " " (espacio encerrado entre dos comillas); si no queremos ningún separador usaremos "" (dos comillas).
Macro concatenatar_rango
Sub concatenatar_rango()
Dim strTemp As String
Dim rngVals As Range, rngCell As Range
Dim varSep As Variant
Dim rngDest As Range
On Error GoTo errCancel
Set rngVals = Application.InputBox("Seleccione el rango de celdas a unir", "Rango a unir", Type:=8)
varSep = Application.InputBox("Entre el separador", "Separador", Type:=2)
Set rngDest = Application.InputBox("Seleccione la celda de destino", "Destino", Type:=8)
For Each rngCell In rngVals
strTemp = strTemp & rngCell & varSep
Next rngCell
rngDest = Mid(strTemp, 1, Len(strTemp) - 1)
Exit Sub
errCancel:
Exit Sub
End Sub
Al activar la macro debemos seleccionar el rango de celdas, el separador y finalmente la celda de destino, como puede verse en este video
Hola. Gracias por aportar tu conocimento a otros. La funcion acepta rangos discontinuos (A1+b4=d7,etc)
ResponderBorrar¿Es una pregunta o una afirmación? Además, (A1+B4=D7) no es un rango; es una expresión lógica que puede dar omo ressultado FALSO o VERDADERO.
ResponderBorrarHola Jorge,
ResponderBorrarLas nuevas funciones de unir cadenas prometen. Haciendo otra cosa, se me ha ocurrido la siguiente formúla (matricial) para invertir una cadena usando la nueva fórmula CONCAT.
=CONCAT(EXTRAE(A1;LARGO(A1)+1-FILA(INDIRECTO("1:"&LARGO(A1)));1))
El texto a invertir en A1.
Un saludo y, como siempre, enhorabuena por tu Blog.
Gracias por colaborar.
ResponderBorrarLa fórmula mostrada arriba fue muy útil para mí. Me gusta este blog junto con los dos blogs son realmente útiles para mí para aprender Excel.
ResponderBorrarEsta función modificada de la original hace que no se generen espacios en blanco si hay celdas vacias
ResponderBorrarFunction Unir_Cadenas(varSep As Variant, rngVals As Range)
Dim strTemp As String
Dim nextTemp As String
Dim rngCell As Range
For Each rngCell In rngVals
nextTemp = rngCell & varSep
If (nextTemp = varSep) Then nextTemp = ""
strTemp = strTemp & nextTemp
Next rngCell
Unir_Cadenas = Mid(strTemp, 1, Len(strTemp) - 1)
End Function