利用VBA给Excel或WPS表格添加自定义公式函数

本文介绍了如何在Excel或WPS中使用VBA编写一个测量方位角的函数,包括创建模块、编写函数代码(如Azimuth和Deg2DMS),以及如何利用这些函数进行角度转换。用户可以创建模板或导入模块到其他表格中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Excel或WPS表格中要使用VBA需要先打开“开发工具”菜单,打开方式请在网上度一下:
在“自定义功能区”打开“开发工具”菜单:

点击“开发工具”菜单,在“开发工具”工具栏上点击“VB编辑器”:

在“VB编辑器”内添加一模块文件(名称任意),在代码区添加函数代码:

如添加一个测量方位角计算的函数,代码如下:

Function Azimuth(Sx As Double, Sy As Double, Ex As Double, Ey As Double, Style As Integer)
Dim DltX As Double, DltY As Double, A_tmp As Double, Pi As Double
Pi = Atn(1) * 4 '定义PI值
DltX = Ex - Sx
DltY = Ey - Sy + 1E-20
A_tmp = Pi * (1 - Sgn(DltY) / 2) - Atn(DltX / DltY) '计算方位角
A_tmp = A_tmp * 180 / Pi '转换为360进制角度
Azimuth = Deg2DMS(A_tmp, Style)
End Function

这个函数中要用到一个格式转换函数:

'转换十进制角度为度分秒
'Style=-1为弧度格式
'Style=0为“DD MM SS”格式
'Style=1为“DD-MM-SS”格式
'Style=2为“DD°MMˊSS""”格式
'Style=其它值时返回十进制度值
Function Deg2DMS(DegValue As Double, Style As Integer)
Dim tD As Integer, tM As Integer, tS As Double, tmp As Double, SignChar As String
If Sgn(DegValue) = -1 Then
SignChar = "-"
Else
SignChar = ""
End If
DegValue = Abs(DegValue)
tD = Fix(DegValue)
tmp = (DegValue - tD) * 60
tM = Fix(tmp)
tmp = (tmp - tM) * 60
tS = Round(tmp, 1)
'2016-12-27调整,避免出现60分、60秒的情况
If tS = 60 Then
tM = tM + 1
tS = 0
End If
If tM = 60 Then
tD = tD + 1
tD = 0
End If
Select Case Style
Case -1 '返回弧度
If SignChar = "-" Then
Deg2DMS = -DegValue * Atn(1) * 4 / 180
Else
Deg2DMS = DegValue * Atn(1) * 4 / 180
End If
Case 0
Deg2DMS = SignChar & tD & " " & Format(tM, "00") & " " & Format(tS, "00.0")
Case 1
Deg2DMS = SignChar & tD & "-" & Format(tM, "00") & "-" & Format(tS, "00.0")
Case 2
Deg2DMS = SignChar & tD & "°" & Format(tM, "00") & "ˊ" & Format(tS, "00.0") & """"
Case Else
If SignChar = "-" Then
Deg2DMS = -DegValue
Else
Deg2DMS = DegValue
End If
End Select
End Function

使用效果如Excel或WPS表格内部函数一样,输入函数前两个字母时会提示函数名:

按提示输入值:

计算结果:

将此表格保存或另存为模板即可,也可将模块文件导出,在其它表格中导入就可使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测量老覃

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值