0

我用谷歌搜索了很多,但没有找到任何解决方案。我想在 Excel 中将 Lat Long 数据(度、分、秒)转换为十进制。

传统上,经纬度数据是这样25°43'21.3"的,但我正在工作的数据库没有度数(°)符号,它有点(。)而不是度数。例如 -25.43'21.3"

那么将什么脚本转换25.43'21.3"为十进制之类的- 25.722583333333333??

当数据带有(°)符号时,以下代码有效。

    Function Convert_Decimal(Degree_Deg As String) As Double
   ' Declare the variables to be double precision floating-point.
   Dim degrees As Double
   Dim minutes As Double
   Dim seconds As Double
   ' Set degree to value before "°" of Argument Passed.
   degrees = Val(Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1))
   ' Set minutes to the value between the "°" and the "'"
   ' of the text string for the variable Degree_Deg divided by
   ' 60. The Val function converts the text string to a number.
   minutes = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _
             InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _
             "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
            2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2)) _
            / 3600
   Convert_Decimal = degrees + minutes + seconds
End Function
4

1 回答 1

2

这将做到:

Private Const vbQuote As String = """"

Public Sub test()
    Debug.Print answer("25.43'21.3""")
End Sub


Public Function answer(ByVal s As String) As Double
    Dim degrees As Double
    Dim minutes As Double
    Dim seconds As Double

    Dim dotPos As Integer 'position of first dot in the string
    Dim commaPos As Integer 'position of comma in the string
    Dim quotePos As Integer 'position of quote in the string

    dotPos = InStr(s, ".")
    commaPos = InStr(s, "'")
    quotePos = InStr(s, vbQuote)

    If dotPos = 0 Or _
        commaPos = 0 Or _
        quotePos = 0 Or _
        dotPos > commaPos Or _
        commaPos > quotePos Then

        'some error handling here
        Stop
    End If

    degrees = CDbl(Left(s, dotPos - 1))
    minutes = CDbl(Mid(s, dotPos + 1, commaPos - dotPos - 1))
    seconds = CDbl(Mid(s, commaPos + 1, quotePos - commaPos - 1))

    answer = degrees + minutes / 60 + seconds / 3600

End Function
于 2013-05-15T07:46:11.330 回答