Hoy veremos una UDF (función personalizada en VBA) muy simple como respuesta a la cuestión planteada de un usuario, quien pedía obtener en forma de lista los sumandos de un suma dada.
Tenemos un rango de celdas en B2:B4 y en B5 hemos realizado la suma de éstos:
=SUMA(B2:B4)
En C5 insertamos nuestras UDF:
=sumandos(B2:B4)
donde obtenemos el listado de elementos sumados.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un móodulo estándar del explorador de proyectos del Editor de VB:
Una variante sería recuperar la lista a partir de una celda con fórmula:
Tenemos un rango de celdas en B2:B4 y en B5 hemos realizado la suma de éstos:
=SUMA(B2:B4)
En C5 insertamos nuestras UDF:
=sumandos(B2:B4)
donde obtenemos el listado de elementos sumados.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un móodulo estándar del explorador de proyectos del Editor de VB:
Function sumandos(rango) As String
'determinamos número de elementos
n = rango.Count
'recorremos todos los elementos del rango indicado
For i = 1 To n
'unimos los distintos elementos con un separador +
If i = 1 Then
lista = rango.Item(i)
Else
lista = lista & " + " & rango.Item(i)
End If
Next i
'devolvemos a la celda la lista de elementos
sumandos = lista
End FunctionUna variante sería recuperar la lista a partir de una celda con fórmula:
Function sumandos(CeldaFx) As String
Dim funcion As String, Fx As String
'verificamos la celda seleecionada tenga fórmula
If CeldaFx.HasFormula Then
'recuperamos los rangos de trabajo...
funcion = CeldaFx.Formula
Fx = Mid(funcion, InStr(1, funcion, "(") + 1, Len(funcion) - InStr(1, funcion, "(") - 1)
'determinamos número de elementos
n = Range(Fx).Count
'recorremos todos los elementos del rango indicado
For i = 1 To n
'unimos los distintos elementos con un separador +
If i = 1 Then
lista = Range(Fx).Item(i)
Else
lista = lista & " + " & Range(Fx).Item(i)
End If
Next i
'devolvemos a la celda la lista de elementos
sumandos = lista
Else
sumandos = "Celda sin fórmula/función"
End If
End Function


No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.