Gostaria de extrair dados do GoogleMaps? Digamos, CEP, de uma entrada da empresa em uma célula do Excel, através do VBA.
Série de eBooks Donut Project:
Apesar da idade do BigData, não é provável que o MS Excel desapareça de nosso escritório e computadores particulares. Oferece inúmeras possibilidades para armazenar menores quantidades de dados, prepará-los com clareza e realizar vários cálculos. É por isso que também é interessante acessar várias fontes de dados diretamente do MS Excel. Para consultas automatizadas, o Google (e muitos outros provedores de dados) fornecem uma chamada API da web, ou seja, interface de programação, que também pode ser consultada no Excel usando VBA.
Suponha que no último ano você dirigiu muito visitando clientes de negócios, mas não anotou os dados do hodômetro todas as vezes. Agora você tem uma longa lista de lugares onde esteve e precisa da distância automática entre eles.
Bem, você pode consultar manualmente cada rota no Google Maps e, em seguida, copiá-la para uma planilha no Excel. No entanto, presumimos que tenha passado por tantas rotas no ano passado que o trabalho seja tedioso demais.
Seria muito mais fácil se simplesmente usasse uma fórmula do Excel que consultasse e inserisse automaticamente suas rotas. Felizmente, é possível!
Você só precisa definir uma função VBA que faça exatamente isso. E que tipo de postagem seria essa se você tivesse que escrever isso agora...
Para que este código funcione, você precisa substituir YOUR_KEY por uma chave válida para a API do Google. Para obter uma chave precisa abrir uma conta na plataforma Google Maps. Se o número de consultas não ultrapassar uma determinada cota mensal, será gratuito. A cota exata muda às vezes, mas atualmente pode ser lida neste link.
Outra aplicação seria, por exemplo, se você precisasse das coordenadas geográficas para uma série de endereços. Também existe uma API para isso.
Se estiver prestes a deixar o mundo do Excel para recorrer a ferramentas Data Science como R. No R, essas solicitações de API são geralmente mais fáceis porque a função associada geralmente já existe e você não precisa remendá-la sozinho.
1ª OPÇÃO
Public Function GetDistance (start As String, dest As String)
Dim firstVal As String, secondVal As String, lastVal As String
Let firstVal = "https://www.google.com/maps/dir/Santos,+State+of+S%C3%A3o+Paulo/Tamareiras+Park+Hotel,+R.+Oleg%C3%A1rio+Maciel,+187+-+Centro,+Uberaba+-+MG,+38010-230/R.+S%C3%A3o+Pedro,+70+-+Leblon,+Uberaba+-+MG,+38030-410/@-21.8404124,-49.3805777,7z/data=!3m1!4b1!4m19!4m18!1m5!1m1!1s0x94ce03b97cc7856f:0x3ff3e507b04bbc46!2m2!1d-46.3317787!2d-23.9592201!1m5!1m1!1s0x94bad0369791b18f:0xd52040549cdf031e!2m2!1d-47.9378879!2d-19.7522392!1m5!1m1!1s0x94bad016de4bf999:0xaf75591c4238e716!2m2!1d-47.9343983!2d-19.7688608"
Let secondVal = "&destinations="
Let lastVal = "&mode=car&language=en&sensor=false&key=YOUR_KEY"
Set objHTTP = CreateObject ("MSXML2.ServerXMLHTTP")
Let Url = firstVal & Replace (start, " ", "+") & secondVal & Replace (dest, " ", "+") & lastVal
objHTTP.Open "GET", Url, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Set regex = CreateObject ("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
Let tmpVal = Replace (matches(0).SubMatches(0), ".", Application.International (xlListSeparator))
Let GetDistance = CDbl (tmpVal)
Exit Function
ErrorHandl:
Let GetDistance = -1
End Function
2ª OPÇÃO
Option Explicit
Private Sub Worksheet_Change (ByVal Target As Range)
Dim t As Date, gm As New InternetExplorer
Const MAX_WAIT_SEC As Long = 10
If Target.Row = Range ("nom").Row And Target.Column = Range ("nom").Column Then
Let gm.Visible = True
gm.navigate "https://www.google.fr/maps/@-19.7312279,-47.9356511,14z" & Range("nom").Value
While gm.Busy Or gm.readyState <> 4: DoEvents: Wend
Dim elem As Object
Let t = Timer
Do
On Error Resume Next
Set elem = gm.document.querySelector (".section-info-text")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While elem Is Nothing
If Not elem Is Nothing Then
MsgBox Trim$ (elem.innerText)
'Implement logic to extract post code
End If
gm.Quit
End If
End Sub
Conheça também:
Veja outros códigos:
Leia também:
Comente e compartilhe este artigo!
Série Piece of Cake
- PIECE OF CAKE - MS Excel - Zipando - Compacte no formato Zip
- PIECE OF CAKE - MS Excel - Zipando - Escolha os Arquivos a Compactar
- PIECE OF CAKE - MS Excel - Zipando - Escolha uma Pasta e Compacte
- PIECE OF CAKE - MS Excel - Zipando - Compacte Todos os Arquivos da Pasta
- PIECE OF CAKE - MS Excel - Zipando - Compacte a Planilha Atual
- PIECE OF CAKE - MS Excel - Zipando - Compacte e Envie por e-Mail
- PIECE OF CAKE - Connecting to Oracle 12g with Excel VBA
- PIECE OF CAKE - Extract Path From String
- PIECE OF CAKE - Detecta se Arquivo Existe
- PIECE OF CAKE - MS Excel - Finding Last Row
- PIECE OF CAKE - Obtendo Endereço IP
- PIECE OF CAKE - Criando Arquivo Texto Externo
- PIECE OF CAKE - Criando Tabelas no SQL Server a partir do MS Excel
- PIECE OF CAKE - Notação Húngara
- PIECE OF CAKE - Usando Stored Procedures
- PIECE OF CAKE - Microsoft Access - Removendo Prefixo das Tabelas
- PIECE OF CAKE - MS Access e MS Word - Técnica de Automação
- PIECE OF CAKE - MS Access - 5 Formas Manuais de Reparo
- PIECE OF CAKE - Correção de Métricas
- PIECE OF CAKE - Convertendo Texto em Imagem
- PIECE OF CAKE - Excel - Manipule o Google Maps em sua Planilha
- PIECE OF CAKE - VBA Excel - Traduzindo Planilhas - Google Translate API
- PIECE OF CAKE - Defina a Latitude e a Longitude
Séries Donut
- DONUT PROJECT 2018 - VBA - 12 - Aumente sua Produtividade
- DONUT PROJECT 2018 - VBA - 11 - Os Benefícios do Controle de Versão
- DONUT PROJECT 2018 - VBA - 10 - Loop For-Each
- DONUT PROJECT 2018 - VBA - 09 - Método Count
- DONUT PROJECT 2018 - VBA - 08 - Referenciando Ranges
- DONUT PROJECT 2018 - VBA - 07 - Amostra de Macro
- DONUT PROJECT 2018 - VBA - 06 - Recursos Adicionais
- DONUT PROJECT 2018 - VBA - 05 - Gravando a Primeira Macro
- DONUT PROJECT 2018 - VBA - 04 - Opções de Solução
- DONUT PROJECT 2018 - VBA - 03 - Requisitos e Preparação
- DONUT PROJECT 2018 - VBA - 02 - Continua Cético
- DONUT PROJECT 2018 - VBA - 01 - Maximizando Sua Eficiência
- DONUT PROJECT 2018 - Excel - Gravando Macro Altere SELECT por RANGE
- DONUT PROJECT 2018 - O que Desenvolvedores Aprendem com Michael Jordan
- DONUT PROJECT 2018 - Excel - Macros - Mudando o Mindset
- DONUT PROJECT 2018 - Excel - Acelerando Macros
- DONUT PROJECT 2015 - Extraindo e-Mails
- DONUT PROJECT 2015 - Função - Extraindo Elementos da String
- DONUT PROJECT 2015 - Função - Retornando Nº de ocorrências de um Caractere
- DONUT PROJECT 2015 - Função - Retorna Conteúdo Delimitado por 2 Caracteres
- DONUT PROJECT 2015 - Função - Retorna Apenas o Conteúdo Entre Parênteses
- DONUT PROJECT 2015 - Função - Extrai Conteúdo entre Parênteses
- DONUT PROJECT 2015 - Excel - Report Layout
- DONUT PROJECT 2015 - Excel - Grand Totals - Inserindo Totais na Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Mudando a Fonte de Dados da Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Aplicando Refresh em Tabelas Dinâmicas
- DONUT PROJECT 2015 - Como Manter Informações parcialmente Anônimas
- DONUT PROJECT 2015 - Excel - Limpando o Filtro da Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Criando Filtros Múltiplos na Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Criando Filtro de Relatório na Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Remover Campos Calculados da Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Remover Campos da Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Adicionar Campos Calculados na Tabela Dinâmica
- DONUT PROJECT 2015 - Excel - Apagar todas as Tabelas Dinâmicas
- DONUT PROJECT 2015 - Excel - Apagar Tabela Dinâmica Específica
- DONUT PROJECT 2015 - Adicionar Rodapé de Confidencialidade no Office
- DONUT PROJECT 2015 - Excel - Criando uma Tabela Dinâmica
- DONUT PROJECT - Use os add-ins do MS Excel e dê um salto em sua performance
- DONUT PROJECT - VBA - Automatize o Outlook para enviar um e-mail com anexo
- DONUT PROJECT - VBA - Outlook - Salvando arquivos anexados nos e-mails
- DONUT PROJECT - VBA - Criando uma Matriz de Datas MAT - Moving Annual Total
- DONUT PROJECT - VBA - Excel - Atualize Tabelas Dinâmicas
- DONUT PROJECT - VBA - Excel - Removendo os Caracteres Alfabéticos e Especiais
- DONUT PROJECT 2014 - VBA - Access - Criando uma Query com Parâmetros
- DONUT PROJECT 2014 - VBA - Access - Atualizando o conteúdo de uma Query
- DONUT PROJECT - VBA - Access - Saiba o Número de Registro de cada tabela
- DONUT PROJECT - VBA - Access - Extraia Dados sem Problemas de TIMEOUT
- DONUT PROJECT - VBA - Access - Lista o Tamanho de Todas as Tabelas
- DONUT PROJECT - VBA - Excel - Populando um ListBox no seu Formulário
- DONUT PROJECT - VBA - Excel - Importando arquivos CSV
- DONUT PROJECT - VBA - Excel - Deletando Conexões de Dados
- DONUT PROJECT - VBA - Excel - Obtendo o Nome da Planilha sem a Extensão
- DONUT PROJECT - VBA - WORD - Exportação Automatizada - DOC para PDF
Nenhum comentário:
Postar um comentário