Descargar el fichero: redondear.xlsm
Redondear un número es una tarea común que podemos hacer con la fórmula de Excel REDONDEAR. En éste post nos proponemos programar una función en VBA, mediante una macro, que produzca el redondeo.
Redondear a cero decimales
Comencemos redondeando a cero decimales. Así el número 3,14159 (¡me suena este número!) se puede redondear a cero decimales como 3. Y el número 2,7182818 (y éste ¿me debería sonar?) se puede redondear a cero decimales como 3.
Código:
Function Redondealo(n As Double) As Double If n >= Int(n) + 0.5 Then Redondealo = Int(n) + 1 Else Redondealo = Int(n) End If End Function
El primer número visto es pi que se obtiene con la función de Excel
=PI()
El segundo número visto es e, que es la base de los logaritmos neperianos. También podemos decir que es la exponencial de 1. En Excel se puede calcular con la siguiente expresión:
=EXP(1)
Si aplicamos la función definida por el usuario Redondealo obtendremos en ambos casos el valor de 3.
=Redondealo(PI())
=Redondealo(EXP(1))
Redondear invocando la función de Excel
Todas las funciones disponibles en Excel se pueden invocar mediante una macro. El código requiere que la función a la que llamemos esté escrita en inglés. Para obtener un listado de la funciones en inglés puede consultar el siguiente enlace.
Glosario: Traducción de funciones
La función REDONDEAR en español equivale a la función ROUND en inglés. La expresión que hemos de utilizar en VBA para invocar a esta función es la siguiente:
Application.WorksheetFunction.round(número, precisión)
Código:
Function SuRedondeo(numero, precision) SuRedondeo = Application.WorksheetFunction.Round(numero, precision) End Function
Programemos la función
Con la función Redondealo fuimos capaces de redondear a cero decimales. En esta ocasión vamos a introducir la variable p que recoge la precisión del redondeo. La función se llama MiRedondeo y el código es el siguiente.
Código:
Function MiRedondeo(n As Double, p As Single) As Double If n * 10 ^ p >= Int(n * 10 ^ p) + 0.5 Then MiRedondeo = Int(n * 10 ^ p + 1) / (10 ^ p) Else MiRedondeo = Int(n * 10 ^ p) / (10 ^ p) End If End Function
Podemos ver el resultado aplicado a Pi y a e.
Muy interesante su blogg lo estaré visitando con mas frecuencia.
ResponderEliminar