Tengo un error en argumento de función VBA
Estimado experto(a):
Estaba buscando código VBA para crear una función que me permita concatenar textos en una columna. Por ejemplo ingresé en A1:"Jorge", en A2:"Manuel", en A3:"Felipe", etc.
Hallé la siguiente función:
Public Function Concat1(Rango As Range, ByVal Sep As String) As String
Dim Datos As Variant
Datos = Rango.Value
If UBound(Datos, 1) > 1 Then
Concat1 = VBA.Join(Application.Transpose(Datos), Sep)
Else Concat1 = VBA.Join(Application.Index(Datos, 1, 0), Sep)
End If
End Function
Cuando llamo a esta función desde Excel con el rango fijo (por ejemplo asignando a la celda B2 la siguiente función =Concat1(A1:A3,", ") el resultado es correcto:
en B2 queda: "Jorge, Manuel, Felipe"
El problema es cuando quiero que el rango de la columna A sea dinámico, es decir pueda agregar más nombres en la columna A y la función los concatene automáticamente, entonces, en B2 asigno la función de la siguiente manera:
=Concat1(INDIRECTO("$A$1:"&"$A$"&CONTARA($A:$A)))
y esto me arroja el error: #VALOR!
Agradecería enormemente si me pudiesen orientar en que parte falla la función o que cambios se podrían hacer para que acepte el argumento INDIRECTO.
Nota: He encontrado otros códigos que concatenan y me permiten incluir INDIRECTO como argumento, pero este código contiene la función nativa de VBA Join y la rapidez de éste cuando hay cientos o miles de filas para concatenar intuyo que debiese ser mejor.
De antemano,
muchas gracias.
Estaba buscando código VBA para crear una función que me permita concatenar textos en una columna. Por ejemplo ingresé en A1:"Jorge", en A2:"Manuel", en A3:"Felipe", etc.
Hallé la siguiente función:
Public Function Concat1(Rango As Range, ByVal Sep As String) As String
Dim Datos As Variant
Datos = Rango.Value
If UBound(Datos, 1) > 1 Then
Concat1 = VBA.Join(Application.Transpose(Datos), Sep)
Else Concat1 = VBA.Join(Application.Index(Datos, 1, 0), Sep)
End If
End Function
Cuando llamo a esta función desde Excel con el rango fijo (por ejemplo asignando a la celda B2 la siguiente función =Concat1(A1:A3,", ") el resultado es correcto:
en B2 queda: "Jorge, Manuel, Felipe"
El problema es cuando quiero que el rango de la columna A sea dinámico, es decir pueda agregar más nombres en la columna A y la función los concatene automáticamente, entonces, en B2 asigno la función de la siguiente manera:
=Concat1(INDIRECTO("$A$1:"&"$A$"&CONTARA($A:$A)))
y esto me arroja el error: #VALOR!
Agradecería enormemente si me pudiesen orientar en que parte falla la función o que cambios se podrían hacer para que acepte el argumento INDIRECTO.
Nota: He encontrado otros códigos que concatenan y me permiten incluir INDIRECTO como argumento, pero este código contiene la función nativa de VBA Join y la rapidez de éste cuando hay cientos o miles de filas para concatenar intuyo que debiese ser mejor.
De antemano,
muchas gracias.