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.

image

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

You may also like...