如何使用 Excel VBA 創建地理工具以獲取地址的緯度和經度坐標

立即分享:

按照這篇文章構建您自己的地理工具,您可以使用該工具獲取地址的緯度和經度坐標。 像這樣的轉換器通常被房地產經紀人使用。

立即下載

如果您想盡快開始使用該軟體,那麼您可以:

立即下載軟件

否則,如果要DIY,可以閱讀以下內容。

讓我們準備GUI

您只需要一個 Excel 工作表,可以根據需要命名。在本例中,我使用預設的工作表名稱“Sheet1”。下一步是在該工作表中新增必要的標題。如果輸入的地址包含郊區、州/省、郵遞區號和國家/地區,經緯度轉換器就能給出準確的結果。如圖所示,準備標題。我們將經緯度作為最後兩列添加。我們還需要一個按鈕來允許用戶進行轉換。因此,讓我們插入一個形狀並填滿顏色,使其看起來像一個按鈕。準備GUI

讓它發揮作用

此處提供的腳本應複製到新模塊中。 不要忘記將您的工作簿保存為啟用宏的工作簿文件。 Sub“FindThis”應該附加到我們剛剛創建的按鈕上。

讓我們測試一下

將地址及其他資訊加入對應的欄位。點擊按鈕運行宏,該宏將顯示表格中所有位址的經緯度座標。巨集將從第 2 行開始執行,直到遇到空行為止。添加地址並點擊按鈕

如何運作?

使用腳本,我們創建了兩個函數。 一個用於獲取 Lat 值,另一個用於獲取 Long 值。 使用 FOR 循環,我們將每個地址傳遞給這些函數並在屏幕上顯示結果。

腳本

Function GETLAT(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    x = InStr(1, v_string, "<LAT>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LAT>")
        GETLAT = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Function GETLNG(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    
    x = InStr(1, v_string, "<LNG>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LNG>")
        GETLNG = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Sub FindThis()
    For r = 2 To 5
        Range("F" & r).Value = GETLAT(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
        Range("G" & r).Value = GETLNG(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
    Next r
End Sub

如果您使用腳本沒有收到正確的結果,則可能的原因是 excel 損壞。 然後你可以使用 Excel文件恢復工具 如 DataNumen Excel Repair 修復Excel。

作者簡介:

Nick Vipond是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 維修文件問題 和Outlook恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。