Extrair Cotação de Moedas na WEB com VBA – [WEB Scraping]
Nessa aula eu vou te mostrar como você pode extrair cotação de moedas na web utilizando o VBA e deixar esse processo automático!
Para extrair cotação de moedas na web com VBA, a macro monta o link da API PTAX do Banco Central com o código da moeda e a data digitados na planilha, abre esse endereço pelo objeto do Internet Explorer, espera a página carregar e converte com CDbl o valor lido na tag td para a célula B5.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
O que você aprende neste vídeo
Resposta rápida: A aula monta, passo a passo, uma macro em VBA que busca a cotação de moedas na API do Banco Central: cria o objeto do Internet Explorer com CreateObject, navega até o link montado com a moeda e a data da planilha, lê o valor de dentro da tag td e converte o texto para número com CDbl.
Neste vídeo (33 min):
- 3:00 - Cria o objeto do Internet Explorer dentro do VBA com
Set, porque é um objeto complexo, não um valor simples - 5:00 - Deixa o Internet Explorer visível com
.Visible = Truepara acompanhar o que a macro está fazendo - 6:00 - Guarda o link da API do Banco Central numa variável e navega até ele com
.Navigate - 8:00 - Usa o F12 do navegador para inspecionar o código-fonte da página e achar a tag
tdque guarda o valor da cotação - 10:00 - Usa
GetElementsByTagName("td")para pegar o elemento e extrai o texto de dentro dele com.innerText - 15:00 - Mostra que o valor lido chega como texto, não como número, e por isso precisa ser convertido antes de usar
- 16:00 - Converte o texto lido para número decimal com
CDbl - 19:00 - Monta o link da API concatenando o código da moeda e a data digitados na planilha
- 22:00 - Descobre que a data precisa estar no formato americano, mês-dia-ano, para a API do Banco Central aceitar
- 27:00 - Corrige o erro de tentar ler a tag antes da página terminar de carregar, usando um laço que espera o Internet Explorer ficar pronto
- 30:00 - Troca o laço de espera por
Application.Wait, dando um segundo antes de ler o valor - 31:00 - Deixa o Internet Explorer invisível na versão final do código e limpa o objeto no fim com
Set ... = Nothing
Trechos do vídeo:
- Criar um objeto do Internet Explorer no VBA exige o comando
Set, porque diferente de um número ou texto, ele guarda várias informações de uma vez - O valor lido de dentro da tag td chega como texto, não como número: é preciso converter com
CDblantes de usá-lo em qualquer conta - A API do Banco Central espera a data no formato americano, mês-dia-ano, e não no formato brasileiro usado na planilha
- Tentar ler a tag antes da página terminar de carregar dá erro: a macro precisa esperar o Internet Explorer sinalizar que terminou, com um laço de espera ou com
Application.Wait
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Você já tentou obter cotações de moedas com VBA mas não sabia como? Hoje eu vou te mostrar como fazer isso utilizando API do Banco Central no VBA!
Vou te mostrar como extrair cotação de moedas na web com VBA utilizando essa API do Banco Central, pois ele já fornece essa API em um formato de link.
Isso vai facilitar muito o nosso web scraping com VBA, pois vamos poder fazer algumas alterações nesse link para deixá-lo automático inserindo as informações da moeda desejada e da data da cotação.
Agora vamos pra aula para aprender como obter a cotação de moedas com VBA utilizando o web scraping que é uma busca na internet!
Sub BuscarCotacoes()
Set objIE = CreateObject("InternetExplorer.Application")
'objIE.Visible = True
moedaCot = Cells(3, 2).Value
dataCot = Format(Cells(4, 2).Value, "mm-dd-yyyy")
linkCot = "https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoMoedaPeriodoFechamento(codigoMoeda='" _
& moedaCot & "',dataInicialCotacao='" & dataCot & "',dataFinalCotacao='" & dataCot & "')?$select=cotacaoCompra"
objIE.Navigate linkCot
Do While objIE.busy And objIE.readyState <> "READYSTATE_COMPLETE"
DoEvents
Loop
Application.Wait (Now + TimeValue("00:00:01"))
Cells(5, 2).Value = CDbl(objIE.Document.getElementsByTagName("td")(0).innerText)
objIE.Quit
Set objIE = Nothing
End Sub
Comentários a respeito do código para ver como extrair cotação de moedas na web com VBA:
- Vamos “setar” uma variável chamada “objIE” que representará o objeto do programa do Internet Explorer em si, que vai ser criado no começo
- Vamos fazer com que o objIE fique visível, para que possamos ver o resultado do código nele, colocando sua propriedade Visible como True
- Vamos armazenar na variável “moedaCot” o que estiver escrito na célula B3 da nossa planilha em Excel, que é a sigla da moeda com 3 letras escolhida: CAD, EUR, GBP, JPY ou USD
- Vamos armazenar na variável “dataCot” o que estiver escrito na célula B4 da nossa planilha em Excel, que é a data escolhida para ser a referência de quando queremos buscar a cotação da moeda escolhida, já com o formato (função Format) de “mm-dd-yyyy”, onde m = mês, d = dia e y = ano.
- Vamos armazenar na variável linkCot o link responsável por entrar no site do Banco Central com o objetivo de buscar essa cotação, já incluindo a data que queremos buscar, através da variável “dataCot” e a moeda que queremos buscar, com a variável “moedaCot”
- Enfim vamos fazer o Internet Explorer de fato ir até a página (método Navigate) informada pelo link (linkCot), moedaCot e dataCot para pegarmos a moeda de cotação daquele exato dia informado na nossa planilha em Excel
- Usaremos de Estrutura de repetição Do Until que vai conferir o estado de funcionamento do Internet Explorer. Enquanto ele estiver ocupado e com estado não “pronto”, o loop vai continuar funcionando, até que o seu estado esteja pronto e a página carregada por completo
- Vamos fazer o Excel ficar congelado e não realizar nenhuma ação de código em VBA por 1 segundo para dar tempo de a página ser carregada por completo e dar tempo do código esperar isso acontecer para fazer o próximo passo (e evitar erros)
- Assim, poderemos pegar o texto que estiver na tag “td” do nosso navegador aberto (objIE), converter para número através da função CDbl, porque ele retorna um texto por padrão, e registrar na célula B5 do Excel
- Em seguida aplicaremos o método Quit na variável que representa o Internet Explorer (objIE) para que ele seja fechado
- Por boas práticas vamos esvaziar a variável “objIE” (Nothing) para que ela não fique armazenada o tempo inteiro na memória do computador enquanto o arquivo está aberto no Excel
- Será gerada uma mensagem ao final do código (MsgBox) informando que a procuração foi gerada com sucesso
- Se encerra o código
Perguntas frequentes
1. Quais moedas o código consegue buscar?
A macro usa a sigla de três letras digitada na célula B3: CAD, EUR, GBP, JPY ou USD. Esse valor entra na variável moedaCot e é encaixado no parâmetro codigoMoeda do link do Banco Central, que devolve a cotação de compra da moeda escolhida naquele dia.
2. Em que formato a data precisa estar?
A data fica na célula B4 e é convertida pela função Format para o padrão mm-dd-yyyy, ou seja, mês, dia e ano. A mesma data alimenta os parâmetros dataInicialCotacao e dataFinalCotacao do link, que busca o fechamento daquele dia específico.
3. Por que a macro espera antes de ler o valor?
Porque a página pode não carregar na hora. O código usa um laço que roda enquanto o Internet Explorer estiver ocupado e o estado não for de página pronta, com DoEvents, e ainda aplica um Application.Wait de 1 segundo. Sem essa pausa, o VBA leria um conteúdo que ainda não existe.
4. Como o valor da cotação chega na planilha?
Depois que a página carrega, o código pega o texto do primeiro elemento com a tag td, converte de texto para número com a função CDbl e grava na célula B5. Em seguida encerra o navegador com o método Quit e esvazia a variável objIE para liberar memória.
Conclusão de Como Extrair Cotação de Moedas na Web
Essa é mais uma aula de macros VBA que vai te ajudar muito a automatizar seus processos dentro do Excel para aumentar sua produtividade.
Dessa forma teremos uma macro para automatizar cotações de moedas onde você pode utilizar apenas clicando em um botão, então além de simples fica muito fácil de utilizar depois.
Utilizando uma integração com o Internet Explorer, fazendo um Web Scraping conseguimos fazer isso por uma API específica de link.
Fique ligado no nosso canal do Youtube para mais conteúdo de Excel e VBA toda semana!
Valeu, pessoal! Até o próximo post!
Hashtag Treinamentos
Para acessar outras publicações de VBA, clique aqui!
Quer aprender mais sobre VBA com um Minicurso Gratuito?

