Supongo que si trabajamos en Excel es más rápido emplear Application.Worksheetfunction para utilizar las funciones que incorpora Excel, pero es que Excel no es el único programa con VBA ni el único en el que podemos querer realizar algún calculo que se salga de las operaciones aritméticas básicas + - * /.
VBA incopora algunas funciones matemáticas básicas, pero tampoco está pensado para fórmulas muy complejas. Si necesitamos más funciones, debemos programarlas a partir de las funciones básicas incorporadas. Si en la ayuda de VBA buscas "Funciones matemáticas derivadas" aparece una retahíla de funciones trigonométricas calculadas a partir de las funciones que incorpora VBA.
Bueno, por si acaso alguno lo necesita, aquí os dejo estas funciones derivadas convertidas a VBA a partir de la información que aparece en la ayuda, así evitamos tener que teclearlo de nuevo. No es algo que utilice todo el mundo pero alguien tiene que hacer caso a los que paceden "trabajos raros", que son como las enfermedades raras, afectan a pocas personas como para atraer la atención de los grandes laboratorios, pero no podemos olvidarlos sólo por eso ¿no?
También hay una función PI que devuelve el número PI, una función Log10 para calcular el logaritmo decimal, y una función LogY para calcular el logaritmo en base Y.
también he añadido una función SexToRad para convertir de grados sexagesimales a radianes, y RadToSex que hace la conversión de radianes a sexagesimales (porque las funciones trigonométricas operan en radianes).
He mantenido las abreviaturas en Inglés para respetar lo que aparece en la ayuda de VBA.
Aquí os dejo el código. Más abajo he adjuntado un archivo .bas para poder descargarlo e importarlo a vuestros proyectos.
Espero que os resulte de utilidad.
Por supuesto, se admiten comentarios. (añade un comentario haciendo clic aquí)
Function ArcSin(x As Double) As Double' funciones trigonométricas que VBA no incluye por defecto.
' http://www.necesitomas.com/excel
' todos los ángulos en RADIANES
Function Pi() As Double
' número Pi
Pi = 4 * Atn(1)
End Function
Function Sec(x As Double) As Double
' secante
Sec = 1 / Cos(x)
End Function
Function Cosec(x As Double) As Double
' cosecante
Cosec = 1 / Sin(x)
End Function
Function Cotan(x As Double) As Double
' cotangente
Cotan = 1 / Tan(x)
End Function
' Arcoseno
ArcSin = Atn(x / Sqr(-x * x + 1))
End Function
Function ArcCos(x As Double) As Double
' Arcocoseno
ArcCos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function
Function ArcSec(x As Double) As Double
' Arcosecante
ArcSec = Atn(x / Sqr(x * x - 1)) + Sgn((x) - 1) * (2 * Atn(1))
End Function
Function ArcCosec(x As Double) As Double
' Arcocosecante
ArcCosec = Atn(x / Sqr(x * x - 1)) + (Sgn(x) - 1) * (2 * Atn(1))
End Function
Function ArcCotan(x As Double) As Double
' Arcocotangente
ArcCotan = Atn(x) + 2 * Atn(1)
End Function
Function HSin(x As Double) As Double
' seno hiperbólico
HSin = (Exp(x) - Exp(-x)) / 2
End Function
Function HCos(x As Double) As Double
' coseno hiperbólico
HCos = (Exp(x) + Exp(-x)) / 2
End Function
Function HTan(x As Double) As Double
' tangente hiperbólica
HTan = (Exp(x) - Exp(-x)) / (Exp(x) + Exp(-x))
End Function
Function HSec(x As Double) As Double
' secante hiperbólica
HSec = 2 / (Exp(x) + Exp(-x))
End Function
Function HCosec(x As Double) As Double
' cosecante hiperbólica
HCosec = 2 / (Exp(x) - Exp(-x))
End Function
Function HCotan(x As Double) As Double
' cotangente hiperbólica
HCotan = (Exp(x) + Exp(-x)) / (Exp(x) - Exp(-x))
End Function
Function HArcSin(x As Double) As Double
' Arcoseno hiperbólico
HArcSin = Log(x + Sqr(x * x + 1))
End Function
Function HArcCos(x As Double) As Double
' Arcocoseno hiperbólico
HArcCos = Log(x + Sqr(x * x - 1))
End Function
Function HArcTan(x As Double) As Double
' arcotangente hiperbólico
HArcTan = Log((1 + x) / (1 - x)) / 2
End Function
Function HArcSec(x As Double) As Double
' arcosecante hiperbólico
HArcSec = Log((Sqr(-x * x + 1) + 1) / x)
End Function
Function HArcCosec(x As Double) As Double
' arcocosecante hiperbólico
HArcCosec = Log((Sgn(x) * Sqr(x * x + 1) + 1) / x)
End Function
Function HArccotan(x As Double) As Double
' arcocotangente hiperbólico
HArccotan = Log((x + 1) / (x - 1)) / 2
End Function
Function Log10(x As Double) As Double
' logaritmo decimal
Log10 = Log(x) / Log(10#)
End Function
Function LogY(x As Double, y As Double) As Double
' logaritmo en base Y
LogY = Log(x) / Log(y)
End Function
Function SexToRad(x As Double) As Double
' convierte grados SEXagesimales a RADianes
SexToRad = x * Atn(1) / 45
End Function
Function RadToSex(x As Double) As Double
' convierte RADianes a grados SEXagesimales
RadToSex = x / Atn(1) * 45
End Function
Adjunto | Tamaño |
---|---|
trigonometrico20110720.rar | 1.03 KB |
Comentarios
Re: funciones matemáticas que VBA no incluye
Re: funciones matemáticas que VBA no incluye
También puedes hacer lo siguiente:
Cuando trabajes con otra aplicación que no sea Excel, puedes utilizar las worksheetfunction utilizando una hoja excel auxiliar añadiendo como referencia las Excel Object Library.
Esto se encuentra en Herramientas|Referencias| Microsoft Excel xx.0 Object Library.
xx puede ser 14 para la versión 2010, 15 para la 2013, etc.
De esta manera, podrás utilizar Excel.Application.worksheetfunction
Un ejemplo: Aquí
Un saludo
funciones matemáticas que VBA no incluye
Brillante
he pasado 12 horas buscando una solucioa a acsh(x) en pa abundante bibliografia de vba para exel y
no encontre la solucion sin hasa aqui
gracia
Genial
Muchas gracias, buen trabajo