Actualización: Función EXCELeNFO CONCATERNAR2 con separador y rangos no adyacentes para Excel
En el artículo anterior publiqué la función CONCATENAR (UDF) donde informaba que permitía definir un separador y omitía celdas en blanco.
En este artículo publico otra versión de la función CONCATENAR (UDF), pero ésta nos va a permitir elegir rangos no adyacentes y también un separador.
Cómo funciona
A diferencia de la otra función ésta tendrá como primer parámetro el separador, para después elegir la cantidad que deseemos de rangos a concatenar. La estrucutura es la siguiente:
Cabe señalar que el separador para ésta función no es opcional.
=EICONCATENAR2(separador,rango1,[rango2],…)
En la Figura 1 vemos cómo elegimos una coma como separador, y los parámetros son dos rangos.
Figura 1. Función EXCELeINFO CONCATENAR2 con separador y rangos no adyacentes.
Código vba de la función UDF
Nombre UDF: EICONCATENAR2.
Ubicación: Módulo1.
'--------------------------------------------------------------------------------------- ' Module : Módulo1 ' Author : MVP Excel, Sergio Alejandro Campos ' Notice : Código basado en la función MySum de John Walkenbach ' Date : 15/01/2015 ' Purpose : Función UDF concatenar con parámetros adyacentes, separador ' y omite celdas en blanco. '--------------------------------------------------------------------------------------- ' Function EICONCATENAR2(Separador As Variant, ParamArray argumentos() As Variant) As Variant ' Declaración de variables Dim i As Variant Dim RangoTemporal As Range, Celda As Range Dim m, n ' Application.Volatile ' ' Se procesa cada argumento For i = 0 To UBound(argumentos) ' Se salta argumentos faltantes If Not IsMissing(argumentos(i)) Then ' Analiza los tipos de argumentos Select Case TypeName(argumentos(i)) Case "Range" ' Se crea un rango temporal para manejar rangos completos de filas o columnas Set RangoTemporal = Intersect(argumentos(i).Parent.UsedRange, argumentos(i)) For Each Celda In RangoTemporal If Not Celda.Value = "" Then EICONCATENAR2 = EICONCATENAR2 & Separador & Celda Else End If Next Celda Case Else EICONCATENAR2 = EICONCATENAR2 & " " & argumentos(i) End Select End If Next i ' LargoTexto = Len(EICONCATENAR2) LargoSeparador = Len(Separador) EICONCATENAR2 = Right(EICONCATENAR2, LargoTexto - LargoSeparador) ' End Function