Séries Temporais do Bacen no Excel

Esse post é um pouco mais árido que os anteriores e provavelmente não interessará a tantas pessoas. Mas como gastei um bom tempo para conseguir criar uma função no Excel que baixasse automaticamente valores específicos de séries do site do Banco Central, resolvi compartilhar aqui a solução. A macro é bastante simples e é possível que haja uma maneira mais elegante de realizar essa tarefa; porém, foi o melhor que consegui fazer.

O ponto de partida dessa tarefa foi minha impaciência em relação ao site de Séries Temporais do Banco Central (o site é excelente, mas ficar exportando csv e importando para outras planilhas do Excel com certa frequência causa algum desconforto). E meu desconforto com o site era ainda maior porque na página inicial do site de Séries Temporais há a seguinte frase:

As séries podem ser consultadas individualmente, em grupos ou listas personalizadas, ou de forma automática, de acordo com as instruções constantes no menu Ajuda, submenu Ajuda do sistema, opção Serviços automatizados (webservices). (grifo meu)

Ou seja, a barreira entre a maneira eficiente de trabalhar com esses dados no Excel (leia-se automatizada) e a que eu estava acostumado tinha nome: Web services. Segundo o Wikipedia “Web service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes.” Portanto, nada mais é que uma solução que possibilita a comunicação entre aplicações distintas, permitindo que uma faça um “pedido” para outra e receba uma resposta em uma linguagem padronizada (esse link possui uma boa explicação do serviço). Asim, meu objetivo era conseguir que o Excel se comunicasse com o serviço do Banco Central e esse “pedido” retornasse o valor da série requisitada. Após algumas boas horas de pesquisa cheguei na macro abaixo:


Public Function getValor(oidSerie As Integer, dataReferencia As Date)
Dim sURL As String
Dim sEnv As String
Dim xmlhtp As New MSXML2.XMLHTTP60
Dim xmlDoc As New DOMDocument60
sURL = "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS?method=getValor"


sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>"
sEnv = sEnv & "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">"
sEnv = sEnv & " <soapenv:Body>"
sEnv = sEnv & " <getValor xmlns=""https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS"">"
sEnv = sEnv & " <codigoSerie>" & oidSerie & "</codigoSerie>"
sEnv = sEnv & " <data>" & dataReferencia & "</data>"
sEnv = sEnv & " </getValor>"
sEnv = sEnv & " </soapenv:Body>"
sEnv = sEnv & "</soapenv:Envelope>"


With xmlhtp
.Open "post", sURL, False
.setRequestHeader "Host", "https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl"
.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
.setRequestHeader "soapAction", "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS/getValor"
.setRequestHeader "Accept-encoding", "zip"
.send sEnv
xmlDoc.LoadXML .responseText
End With

Set NodeList = xmlhtp.responseXML.SelectSingleNode("//multiRef")

getValor = NodeList.Text * 1
' Selection = Selection.value

End Function

A macro utiliza um dos serviços diponibilizados pelo Bacen, cuja lista completa está aqui. Mais especificamente, criei uma função chamada getValor que retorna o valor de uma série em uma determinada data, sendo os seguintes parâmetros necessários para a função:

  • long codigoSerie – Código da série pesquisada.
  • String data – String contendo a data (dd/MM/aaaa) do valor a ser pesquisado.

Na macro acima, esses valores são armazenados para a realização do request nos trechos sEnv = sEnv & ” <codigoSerie>” & oidSerie & “</codigoSerie>” e
sEnv = sEnv & ” <data>” & dataReferencia & “</data>”. Para que a macro funcione no Excel é necessário seguir os seguintes passos (com a ressalva de que testei no 2007 e no 2010):

  1. Abra uma nova planilha de Excel e cole o código acima no Visual Basic (para abrir o Visual Basic basta apertar alt+F11 ou ir na aba “Desenvolvedor” e clicar em Visual Basic; caso a aba não esteja disponível siga os passos desse link). O código deverá ser colado em um módulo do Visual Basic (“Inserir>> Módulo”).
  2. No Visual Basic clique em “Ferramentas>> Referências” e habilite a referência “Microsoft XML, v6.0”. Salve o arquivo como planilha habilitada para macro.

Em teoria, isto deveria ser suficiente para que a função funcionasse. Para testá-la basta escrever em qualquer célula do Excel a seguinte fómula: =getValor(4380;”18/06/2011″). Nesse caso, a função buscaria o valor da série 4380 – PIB mensal – Valores correntes (R$ milhões) – na data 18-jun-2011, retornando o valor 358.007,80. É possível escolher qualquer outra combinação par série-data que a fórmula retornará o valor procurado (desde que ele esteja disponível no site do Banco Central). O ponto negativo dessa solução é o lag associado ao carregamento do dado (devido ao service request realizado), tornando a planilha um pouco lenta. Por conta disso, o ideal é armazenar a maior quantidade de dados como valor (sem fórmula), mantendo apenas os últimos valores da série com vínculo.

Por fim, deixo abaixo um formulário para aqueles que quiserem maiores explicações sobre o funcionamento do código (tentarei ajudar no que for possível) e dois links que mais me ajudaram entre aqueles que consultei.

PS: Em tempo, coloco duas considerações levantadas por pessoas que utilizaram esta função no Excel. A primeira, é que talvez seja necessário importar a cadeia de certificados do Banco Central, que pode ser encontrada na página http://www.bcb.gov.br/?CERTDIG. A segunda, é que as séries do Banco Central estão formatadas com o “.” como separador decimal e, portanto, pode ser que o número de casas decimais venham sem formatação. No meu caso, não tive nenhum problema e acredito que a solução simples sejam mudar o separador decimal e de milhar.

Roteiro em R para utilizar do Web service do Banco Central
Exemplo de uso de Web services no Excel

Esse post foi publicado em Dados Públicos, Excel, Passo-a-Passo. Bookmark o link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s