1. 目标

编写一个excel,可以将D3单元格的方位角进行格式转换到E3单元格,转换规则为:D3的单元格角度代表从正北方向,顺时针转动的角度,转换后的角度是两个正向相夹一个锐角的格式,比如说,D3单元格是110,那么转换后的E3单元格将是E20°S,D3单元格为200°,那么E3单元格是S20°W,如果D3单元格是50°,那么E3单元格就是N50°E,如果D3单元格不是整数的角度,那么就四舍五入,E3单元格相夹的角度是整数。

2. 省流

简单讲就是:155→E65°S或者155°→E65°S

3. 实现

为了实现这个功能,我们可以在Excel中使用VBA (Visual Basic for Applications) 来编写一个自定义函数。

1. 实现步骤:

a. 打开Excel,按Alt + F11 打开VBA编辑器。
b. 在VBA编辑器中,插入一个新模块(Insert > Module)。
c. 在新模块中,粘贴以下代码::

点我展开看代码

Function ConvertAngle(value As Variant) As String
    Dim angle As Double
    Dim inputStr As String
    Dim roundedAngle As Integer
    Dim quadrant As Integer
    Dim convertedAngle As Integer
    Dim degPart As String, minPart As String, secPart As String
    ' 检查输入是否为空或错误
    If IsEmpty(value) Or IsError(value) Then
        ConvertAngle = "Invalid Input"
        Exit Function
    End If
    ' 将输入转换为字符串
    inputStr = CStr(value)
    ' 解析度分秒或度分格式
    If InStr(inputStr, "°") > 0 Then
        ' 提取度
        degPart = Left(inputStr, InStr(inputStr, "°") - 1)
        inputStr = Mid(inputStr, InStr(inputStr, "°") + 1)
        ' 提取分(如果存在)
        If InStr(inputStr, "'") > 0 Then
            minPart = Left(inputStr, InStr(inputStr, "'") - 1)
            inputStr = Mid(inputStr, InStr(inputStr, "'") + 1)
            ' 提取秒(如果存在)
            If InStr(inputStr, """") > 0 Then
                secPart = Left(inputStr, InStr(inputStr, """") - 1)
            End If
        End If
        ' 计算总角度
        angle = CDbl(degPart)
        If minPart <> "" Then angle = angle + CDbl(minPart) / 60
        If secPart <> "" Then angle = angle + CDbl(secPart) / 3600
    Else
        ' 如果不是度分秒格式,尝试直接转换为数字
        If Not IsNumeric(inputStr) Then
            ConvertAngle = "Invalid Input"
            Exit Function
        End If
        angle = CDbl(inputStr)
    End If
    ' 确保角度在0-360范围内
    angle = angle Mod 360
    If angle < 0 Then angle = angle + 360 
    ' 四舍五入角度到最近的整数
    roundedAngle = Round(angle)
    ' 确定象限
    quadrant = roundedAngle \ 90
    ' 计算转换后的角度
    convertedAngle = roundedAngle Mod 90
    ' 根据象限返回结果
    Select Case quadrant
        Case 0
            If convertedAngle = 0 Then
                ConvertAngle = "N"
            Else
                ConvertAngle = "N" & convertedAngle & "°E"
            End If
        Case 1
            If convertedAngle = 0 Then
                ConvertAngle = "E"
            Else
                ConvertAngle = "E" & convertedAngle & "°S"
            End If
        Case 2
            If convertedAngle = 0 Then
                ConvertAngle = "S"
            Else
                ConvertAngle = "S" & convertedAngle & "°W"
            End If
        Case 3
            If convertedAngle = 0 Then
                ConvertAngle = "W"
            Else
                ConvertAngle = "W" & convertedAngle & "°N"
            End If
    End Select
End Function
  

2. 特性

- 将输入转换为字符串,并移除可能存在的度数符号(°)。
- 处理输入中可能存在的空格。
- 在移除度数符号后再次检查输入是否为有效数字。

3. 使用方法:

1. 在 Excel 中打开 VBA 编辑器 (Alt + F11)。
2. 插入新模块并粘贴上述代码。
3. 在 E3 单元格中输入公式 `=ConvertAngle(D3)`。

现在,这个函数能够正确处理带有度数符号的输入:

🤞转载请注明出处🤞