【ExcelVBA】緯度経度の表示変換(度分秒→10進、10進→度分秒)



'############################################################
'#緯度経度の表示方法を変換する
'#
'# 引数1:str(度分秒もしくは10進数で書かれた緯度or経度)
'# 引数2:i(省略時0:小数第何位まで表示させるか。四捨五入)
'# 戻値:度分秒の場合は10進数表記、10進数の場合は度分秒表記に変換された結果
'# 想定:日本国内(緯度経度ともに正の場合)
'# 対応表記:「°」「′」「’」「'」「″」※日本語の「度分秒」には対応していない
'#
'############################################################
Function Conv経緯度(ByVal str As String, Optional ByVal i As Long)

Dim  As Long,  As Long,  As Double
If IsNumeric(str) = True Then
    '10進数→度分秒
     = Int(str)
     = Int((str - ) * 60)
     = Round(((str - ) * 60 - ) * 60, i)
    Conv経緯度 =  & "°" &  & "′" &  & "″"
Else
    '度分秒→10進数
    str = StrConv(str, vbNarrow)        '「’」(全角)と「'」(半角)混在対処で半角に
    str = Replace(str, "'", "′")       '「'」を「′」に統一

     = Split(str, "°")(0)
     = Split(Split(str, "′")(0), "°")(1)
     = Val(Split(str, "′")(1))
    Conv経緯度 =  +  / 60 +  / 3600
End If

End Function


Sub test()
Debug.Print Conv経緯度("35°41′9.564""", 3)
Debug.Print Conv経緯度(35.68599, 6)

 35.686
35°419.564
End Sub