funciones matemáticas que VBA no incluye

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í)

 

' 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

Function ArcSin(x As Double) As Double
' 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
 

 

AdjuntoTamaño
File trigonometrico20110720.rar1.03 KB

Temática: 

Comentarios

Re: funciones matemáticas que VBA no incluye

Imagen de Cron

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

Imagen de Ulises

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

Imagen de Fred

Muchas gracias, buen trabajo