首先发布在这里! 我努力学习编写宏VBA函数的一个非常基本的方面,以便在Microsoft Excel中使用。
我正在尝试构建的函数将采用两组坐标并找到它们之间的距离。我已经能够输入我需要的公式并得到我想要的答案但是因为这个公式计算了地球曲率周围的公式,公式很烦人,需要为每个新案例手动修改。 所以我试图创建一个新的宏函数来存储公式,并简单地将四个相关的坐标点作为变量。但是,当我尝试使用新函数时,我现在收到#VALUE错误。
我一直在使用的公式是:
=(3280.84 *(6371 *(2 * ATAN2)(SQRT(1-(SIN(ABS(目的地纬度 - 原点纬度)* PI()/ 180 / 2)^ 2 + COS(原点纬度 * PI()/ 180)* COS(目的地纬度 * PI()/ 180)* SIN(ABS(目的地经度 - Origin) 经度)* PI()/二分之一百八十○)^ 2)),SQRT((SIN(ABS(目的地 纬度 - 原点纬度)* PI()/ 180/2)^ 2 + COS(原点纬度 * PI()/ 180)* COS(目的地纬度 * PI()/ 180)* SIN(ABS(目的地经度 - 原点经度 )* PI()/二分之一百八十○)^ 2))))))
这给了我美尺的距离。
我试图在下面的Excel VBA窗口中将其转换为更简单的功能:
Public Function LatLngDistance(Lat1 As Single, Lng1 As Single, Lat2 As Single,
Lng2 As Single)
LatLngDistance = (3280.84 * (6371 * (2 * Application.Atan2(Application.SQRT(1 - (Application.Sin(Abs(Lat1 - Lat2) * Application.Pi() / 180 / 2) ^ 2 + Application.Cos(Lat2 * Application.Pi() / 180) * Application.Cos(Lat1 * Application.Pi() / 180) * Application.Sin(Abs(Lng1 - Lng2) * Application.Pi() / 180 / 2) ^ 2)), Application.SQRT(Application.Sin(Abs(Lat1 - Lat2) * Application.Pi() / 180 / 2) ^ 2 + Application.Cos(Lat2 * Application.Pi() / 180) * Application.Cos(Lat1 * Application.Pi() / 180) * Application.Sin(Abs(Lng1 - Lng2) * Application.Pi() / 180 / 2) ^ 2)))))
End Function
因为我在尝试使用此函数时遇到#VALUE错误,所以我认为我的错误是将这四个变量错误标记为错误的数据类型。
答案 0 :(得分:1)
Application.Cos
,Application.Sin
和Application.SQRT
无法在VBA中工作。使用内置的VBA函数
LatLngDistance = (3280.84 * (6371 * (2 * Application.Atan2(Sqr(1 - (Sin(Abs(Lat1 - Lat2) * Application.Pi() / 180 / 2) ^ 2 + Cos(Lat2 * Application.Pi() / 180) * Cos(Lat1 * Application.Pi() / 180) * Sin(Abs(Lng1 - Lng2) * Application.Pi() / 180 / 2) ^ 2)), Sqr(Sin(Abs(Lat1 - Lat2) * Application.Pi() / 180 / 2) ^ 2 + Cos(Lat2 * Application.Pi() / 180) * Cos(Lat1 * Application.Pi() / 180) * Sin(Abs(Lng1 - Lng2) * Application.Pi() / 180 / 2) ^ 2)))))