Así como existe la manera de definir funciones (UDFs) con argumentos pre-definidos, codificadas mediante VBA a la medida de las necesidades, es posible también crear UDFs que actúen a partir de los datos de un rango de celdas, las cuales pueden ser de gran utilidad cuando se trabaja con gran cantidad de data.
A fin de explicar con mayor claridad la diferencia y aplicación de estos dos tipos de UDF, se ha preparado el siguiente archivo que contiene las notas de un grupo de alumnos de la universidad: Ejemplo UDF Rango
En primer lugar, en base a las notas obtenidas por cada alumno, se desea calcular el promedio final de cada uno; para lo cual utilizaremos una UDF con los argumentos ( TA1, TA2, TA3, Parcial, Final), los cuales corresponden a cada una de las notas del curso:
Se define el código de la siguiente manera:
Function NOTA_FINAL(TA1, TA2, TA3, Parcial, Final)
'En primer lugar se promedian las 3 tareas académicas
Tareas = (TA1 + TA2 + TA3) / 3
'Se define la función como el 30% de las tareas + 30% del examen parcial y 40% del examen final, con lo cual se obtiene el promedio o nota final del alumno
NOTA_FINAL = Round(Tareas * 0.3 + Parcial * 0.3 + Final * 0.4, 0)
End Function
Por ejemplo, en el primera caso, la función se ingresa en excel tal como se observa en la siguiente imagen:
(Para mayor visualización de la imagen, hacer click en la misma)
Por otra parte, se ha generado otra UDF que a diferencia de la anterior, con esta UDF vamos a seleccionar un rango de datos (el de los promedios finales), a fin de que la función determine la cantidad de alumnos que han aprobado el curso en base a la nota final obtenida vs la nota mínima aprobatoria (en este caso la nota mínima es 13).
Function APROBADOS(RANGO As Range)
'Definimos el número de filas del rango a seleccionar con la función, como un número entero
Dim Filas As Integer
'Se define el rango que tomará la función como la variable "Selección"
Seleccion = RANGO'La variable filas captura la cuenta de filas del rango que se seleccionará (número de filas)
Filas = RANGO.Rows.Count'Con la siguiente estructura de control se analiza cada fila a fin de evaluar si la nota obtenida es menor a la nota aprobatoria, de ser menor, el número de alumnos aprobados no aumenta, de lo contrario se cuenta 1 aprobado más
'Esto se repite hasta que se haya llegado a la última fila de la selecciónFor x = 1 To Filas
If Seleccion(x, 1) < 13 Then
APROBADOS = APROBADOS
Else: APROBADOS = APROBADOS + 1
End If
Next xEnd Function
La función se utilizaría de la siguiente manera:
Del mismo modo, se elaboró otra UDF similar que en lugar de contar el número de aprobados, cuenta el número de desaprobados (ver archivo)
------------------------------------------------------------------------------------------
Elaborado por: Diego Solís Pezzia
3 comentarios
Escriba un comentario →