UDF CONCATENAR con parámetros infinitos y celdas no adyacentes en Excel

En esta ocasión les comparto el rediseño de la función personalizada CONCATENAR, con mejoras sustanciales que la hacen más efectiva.

Qué hay de nuevo

Como lo dije anteriormente, esta función sufre un rediseño en su estructura haciéndola más dinámica.

El primer cambio es que el separador por defecto será el espacio, ya que la función permitirá parámetros infinitos, tal como la función SUMA.

La otra mejora es que las celdas a concatenar ya no están forzadas a que sean adyacentes y se podrán concatenar con texto fijo o fórmulas.

La siguiente imagen muestra un ejemplo de la función.

UDF EICONCATENER en Excel

Figura 1. UDF EICONCATENAR con parámetros infinitos

Código de la función

El siguiente código deberá ir en un módulo normal. Puedes seguir este link para tener conocer más sobre funciones UDF.

'Código basado en la función MySum de John Walkenbach
'
Function EICONCATENAR(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
                EICONCATENAR = EICONCATENAR & " " & Celda
            Next Celda
        Case Else
            EICONCATENAR = EICONCATENAR & " " & argumentos(i)
        End Select
    End If
Next i
'
End Function

You may also like...

5 Responses

  1. Eduardo Rodriguez says:

    Excelente como siempre, gracias Sergio.

  2. Luis Antonio Cervantes says:

    Esta funcion llamo mi atencion por la habilidad de poder concatenar rangos discontinups, texto… pero tiene una desventaja la cual es que el separador es un espacio y si yo quisiera agregar mi separador entre cadenas? Tuve la oportunidad de probar esta funcion concatenando 35 mil registros, cada uno compuesto de 10 columnas, y tardaba siglos, mas aun que al ser una funcion volatil al hacer un cambio en una celda otra vez se vuelve a recalcular o definitiva,ente ya es mi equipo de computo el que esta obsoleto, saludos!

  3. Paco says:

    Hola Sergio; uso esta funcion continuamente y solo echo de menos que no concatene las celdas vacias. si selecciono A1:C3 pero C2 = “” que solo me junto A1 con C3 (pk tb junto C2 pese a que este vacio con “, ,”)
    he intentado hacerlo yo pero no lo consigo

  4. Paco says:

    Estare pendiente, eso seguro. Tus post son de los poco que leo siempre. Gracias.

Leave a Reply

Your email address will not be published.

%d bloggers like this: