Есть ли в VBA функция ATan2? - PullRequest
       12

Есть ли в VBA функция ATan2?

4 голосов
/ 25 февраля 2011

Я бы хотел вычислить atan2 в VBA, но я не уверен, существует ли эта функция (или даже где найти канонический список встроенных функций VBA). Я не использую Excel, поэтому вызов листа невозможен.

Я мог бы реализовать atan2 сам, но я бы предпочел не делать этого, если это возможно.

Ответы [ 4 ]

6 голосов
/ 25 февраля 2011

Чтобы получить список, введите в свой модуль

VBA.Math

Или используйте браузер объектов. Среди прочего вы найдете Atn и Tan, но список довольно короткий, а ATan2 не включен.

Если вы хотите добавить ссылку на библиотеку Excel, вы можете использовать:

Excel.WorksheetFunction.Atan2

РЕДАКТИРОВАТЬ: Вы можете вызывать функции листа Excel из любого приложения Office, которое позволяет вам добавить ссылку на библиотеки Excel. Это не означает использование Excel или рабочего листа, только функция.

5 голосов
/ 29 июня 2012

Как указывалось MarkJ ранее, приведенный выше код завершится ошибкой, когда X <0 и y = 0. Я считаю, что все время будет работать следующее: </p>

Function ArcTan2(X As Double, Y As Double) As Double

Private Const PI As Double = 3.14159265358979
Private Const PI_2 As Double = 1.5707963267949

    Select Case X
        Case Is > 0
            ArcTan2 = Atn(Y / X)
        Case Is < 0
            ArcTan2 = Atn(Y / X) + PI * Sgn(Y)
            If Y = 0 Then ArcTan2 = ArcTan2 + PI
        Case Is = 0
            ArcTan2 = PI_2 * Sgn(Y)
    End Select

End Function

Используется Sgn (0), возвращающий 0 в случае, когда x и y равны 0.

2 голосов
/ 25 февраля 2011

Может быть, этот код подойдет вам:

Private Const Pi As Double = 3.14159265358979

Public Function Atn2(y As Double, x As Double) As Double

  If x > 0 Then

    Atn2 = Atn(y / x)

  ElseIf x < 0 Then

    Atn2 = Sgn(y) * (Pi - Atn(Abs(y / x)))

  ElseIf y = 0 Then

    Atn2 = 0

  Else

    Atn2 = Sgn(y) * Pi / 2

  End If

End Function
0 голосов
/ 07 сентября 2015

Вы можете попробовать с

Application.Atan2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...