Excel ofrece una extensa variedad de fórmulas las cuales nos permiten realizar diversos cálculos. Sin embargo, muchas veces estas fórmulas no se adaptan a nuestras necesidades. Para estas necesidades personales de los usuarios se pueden crear fórmulas definidas por el usuario (UDF, por sus siglas en inglés). Estas se definen en el entorno de VBA.
Por ejemplo, Excel ofrece la posibilidad de calcular el promedio simple de una cantidad de números determinada. Sin embargo, para calcular el promedio de prácticas en la PUCP, se debe eliminar la nota más baja, lo cuál no está incluido en la Función Promedio del Excel, para lograrlo se deben emplear otras funciones, lo cual hace ineficiente el cálculo.
Para simplificar esta labor se ha creado una fórmula que elimina la menor nota y calcula el promedio sobre las 3 notas restantes. La lógica de esta función consiste en sumar 3 notas, prueba todas las combinaciones posibles, y selecciona la mayor, la cual contiene las 3 mayores notas, de esta forma se elimina la nota más baja. El nombre de la función es: prompracticas.
Adicionalmente, para calcular el promedio final, ya que las distintas notas tienen un peso distinto, se ha creado una función que calcule el promedio ponderado según estos pesos. El nombre de la función es: promfinal.
El uso y el código de cada una de las funciones se puede ver en el siguiente archivo: Promedio de Prácticas y Promedio Final
Elaborado por: Rodolfo Rojas B.
30/03/2013 a las 1:58 pm
Una alternativa al codigo es la propuesta que trabajamos definiendo tipo de variables y para eliminar las dos notas mas bajas, como se puede apreciar en la lo que se muestra a continuacion:
Function PromNotaElim_2(R As Range) As Double
Dim n, i, Imin1, Imin2 As Integer
'n es igual al numero de elementos de la seleccion
'Imin1 es la posicion de la primera nota minima
'Imin2 es la posicion de la segunda nota minima
'Ojo R es un vector 1xn que no hace referencia a la celda
Dim suma As Double
suma = 0
n = R.EntireColumn.Count
For i = 1 To n
suma = suma + R(1, i)
Next i
Imin1 = 1
For i = 1 To n
If R(1, i) < R(1, Imin1) Then
Imin1 = i
End If
Next i
Imin2 = 1
If Imin1 = 1 Then
Imin2 = 2
End If
'Comparando con todos excepto con la posicion de la primera nota minima Imin1
For i = 1 To n
If (R(1, i) < R(1, Imin2)) And (i Imin1) Then
Imin2 = i
End If
Next i
PromNotaElim_2 = (suma - R(1, Imin1) - R(1, Imin2)) / (n - 2)
End Function
Espero sus comentarios.
Saludos,
Jorge Luis Rojas Silva
25/05/2013 a las 9:20 pm
Ma sencillo es utilizando una variable auxiliar:
aux = 20
If nota1 <= aux then aux = nota1
If nota2 <= aux then aux = nota2
If nota3 <= aux then aux = nota3
If nota4 <= aux then aux = nota4
promfinal = (nota1 + nota2 + nota3 + nota4 - aux) / 3
Saludos
26/05/2013 a las 10:44 pm
Es interesante, como podemos modificar los valores según nuestras necesidades propias, en le caso de esta UDF permite moldar la función del promedio segun los pesos, que aparte se puede combinar con otras funciones de este blog como por ejemplo el UDF para notas ponderadas la cual permite promediar según la asistencia del alumno.