Como criar uma ferramenta geográfica para obter coordenadas de latitude e longitude para endereços com o Excel VBA

Compartilhe agora:

Siga este artigo e crie sua própria ferramenta geográfica com a qual você pode obter as coordenadas de latitude e longitude de um endereço. Conversores como este são comumente usados ​​por corretores de imóveis.

Faça o download

Se você deseja começar a usar o software o mais rápido possível, então você pode:

Baixe o software agora

Caso contrário, se você quiser DIY, pode ler o conteúdo abaixo.

Vamos preparar a GUI

Você só precisa de uma única planilha do Excel, e pode nomeá-la como desejar. Neste exemplo, estou usando o nome padrão "Planilha1". O próximo passo é adicionar os cabeçalhos necessários a esta planilha. O conversor de latitude e longitude fornece resultados precisos para o endereço inserido, desde que a entrada inclua bairro, estado, CEP e país. Como mostrado na imagem, prepare os cabeçalhos. Vamos adicionar Latitude e Longitude como as duas últimas colunas. Também precisamos de um botão para permitir que o usuário faça a conversão. Então, vamos inserir uma forma e preenchê-la com uma cor para que pareça um botão.Preparar a GUI

Vamos torná-lo funcional

O script fornecido aqui deve ser copiado para um novo módulo. Não se esqueça de salvar sua pasta de trabalho como arquivo de pasta de trabalho habilitado para macro. O Sub “FindThis” deve ser anexado ao botão que acabamos de criar.

vamos testar

Adicione o endereço e outras informações nas respectivas colunas. Clique no botão para executar a macro, que exibirá as coordenadas de latitude e longitude de todos os endereços listados na planilha. A macro começará na linha 2 e continuará até encontrar uma linha vazia.Adicione o endereço e clique no botão

Como funciona?

Com o script criamos duas funções. Um para buscar o valor Lat e outro para buscar o valor Long. Usando um loop FOR, estamos passando cada endereço para essas funções e exibindo o resultado na tela.

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

Se você não estiver recebendo resultados adequados usando o script, o Excel corrompido pode ser um motivo provável. Você pode então usar Ferramenta de recuperação de arquivos do Excel como DataNumen Excel Repair para corrigir o Excel.

Introdução do autor:

Nick Vipond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar problema de documento e produtos de software de recuperação do Outlook. Para mais informações visite www.datanumen.com

Compartilhe agora:

Comentários estão fechados.