Hur man skapar ett geografiskt verktyg för att få koordinater för latitud och longitud för adresser med Excel VBA

Följ den här artikeln och bygg ditt eget geografiska verktyg med vilket du kan få koordinaterna för latitud och longitud för en adress. Omvandlare som detta används ofta av fastighetsmäklare.

Hämta hem nu

Om du vill börja använda programvaran så snart som möjligt kan du:

Ladda ner programvaran nu

Annars kan du läsa innehållet nedan om du vill göra det själv.

Låt oss förbereda GUI

Allt du behöver är ett enda Excel-ark och du kan namnge arket efter behov. I det här exemplet använder jag standardarknamnet "Sheet1". Nästa steg är att lägga till nödvändiga rubriker på detta ark. Latitud- och longitudkonverteraren ger ett korrekt resultat för adressen vi anger om indata inkluderar förort, delstat, postnummer och land. Som visas på bilden, förbered rubriker. Låt oss lägga till latitud och longitud som de två sista kolumnerna. Vi behöver också en knapp som låter användaren göra konverteringen. Så låt oss infoga en form och fylla den med färg så att den visas som en knapp.Förbered GUI

Låt oss göra det funktionellt

Skriptet som tillhandahålls här ska kopieras till en ny modul. Glöm inte att spara din arbetsbok som en makroaktiverad arbetsbokfil. Sub "FindThis" ska bifogas den knapp som vi just har skapat.

Låt oss testa det

Lägg till adressen tillsammans med annan information i respektive kolumner. Klicka på knappen för att köra makrot som visar lat- och longitudkoordinater för alla adresser som listas på arket. Makrot börjar på rad 2 och fortsätter att köras tills det når en tom rad.Lägg till adress och klicka på knappen

Hur det fungerar?

Med skriptet har vi skapat två funktioner. En för att hämta Lat-värde och en annan för att hämta Long-värde. Med en FOR-slinga skickar vi varje adress till dessa funktioner och visar resultatet på skärmen.

Script

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

Om du inte får ordentliga resultat med skriptet kan skadad excel vara en trolig anledning. Du kan sedan använda Excel-filåterställningsverktyg såsom DataNumen Excel Repair för att fixa Excel.

Författarintroduktion:

Nick Vipond är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparera doc problem och programvaruprodukter för återställningsprogram. För mer information besök www.datanumen.com

Kommentarer är stängda.