Cómo crear una herramienta geográfica para obtener coordenadas de latitud y longitud para direcciones con Excel VBA

Comparte ahora:

Siga este artículo y cree su propia herramienta geográfica con la que puede obtener las coordenadas de latitud y longitud de una dirección. Los agentes inmobiliarios suelen utilizar convertidores como este.

Descargar Ahora

Si quieres starPara utilizar el software lo antes posible, puede:

Descargue el software ahora

De lo contrario, si desea hacer bricolaje, puede leer el contenido a continuación.

Preparemos la GUI

Todo lo que necesita es una sola hoja de Excel y puede nombrar la hoja según sus necesidades. En este ejemplo, estoy usando el nombre de hoja predeterminado "Hoja1". El siguiente paso es agregar los encabezados necesarios en esta hoja. El convertidor de latitud y longitud proporciona un resultado preciso para la dirección que pasamos si la entrada incluye suburbio, estado, postcódigo y país. Como se muestra en la imagen, prepare los encabezados. Agreguemos Latitud y Longitud como dos últimas columnas. También necesitamos un botón para permitir que el usuario realice la conversión. Así que insertemos una forma y rellénela de color para que aparezca como un botón.Preparar la GUI

Hagámoslo funcional

La secuencia de comandos proporcionada aquí debe copiarse en un nuevo módulo. No olvide guardar su libro de trabajo como un archivo de libro de trabajo habilitado para macros. El Sub "FindThis" debe adjuntarse al botón que acabamos de crear.

Vamos a probarlo

Agregue la dirección junto con otra información en las columnas respectivas. Haga clic en el botón para ejecutar la macro que mostraría las coordenadas lat y long para todas las direcciones enumeradas en la hoja. La macro setart en la fila 2 y continuará funcionando hasta que llegue a una fila vacía.Agregar dirección y hacer clic en el botón

¿Cómo funciona?

Con el script hemos creado dos funciones. Uno para obtener el valor Lat y otro para obtener el valor Long. Usando un bucle FOR, pasamos cada dirección a estas funciones y mostramos el resultado en la pantalla.

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

Si no obtiene los resultados adecuados con el script, la corrupción de Excel podría ser una razón probable. Luego puede usar Herramienta de recuperación de archivos de Excel como DataNumen Excel Repair para arreglar Excel.

Introducción del autor:

Nick Vipond es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparar problema de doc y productos de software de recuperación de Outlook. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.