Blog

Postado em em 1 de outubro de 2021

Pegar Cotações de Ações Automaticamente com VBA

Nessa aula eu vou te mostrar como pegar cotações de ações automaticamente com o VBA para automatizar o seu trabalho e ganhar produtividade!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, galera! Estão prontos para aprender como pegar cotações de ações no VBA?

Nessa aula eu quero te mostrar como buscar ações com VBA (cotações de ações no VBA) de forma automática.

Isso quer dizer que você vai pegar cotações de ações automática com apenas um clique depois de criar o código (macros VBA).

As macros no VBA são códigos que você cria para poder executá-los depois para facilitar o seu trabalho.

Acompanhe a aula com atenção porque hoje nós vamos criar do zero um código simples para que você possa obter as cotações de ações e ajustar esses dados dentro do Excel para que possa utilizar para o seu trabalho.

Com isso já vai ter sua lista de ações e vai conseguir obter todos os dados necessários. Agora vamos aprender como pegar cotações de ações no VBA!

Sub buscarCotacaoAtivos()

Dim Http As New WinHttpRequest

ultLin = Range("A1000000").End(xlUp).Row

dataAgora = DateDiff("s", "1/1/1970", Now)

For lin = 2 To ultLin

    linkCot = "https://query1.finance.yahoo.com/v7/finance/download/" & Cells(lin, 1).Value _
   & ".SA?period1=" & dataAgora & "&period2=" & dataAgora & "&interval=1d&events=history"

    Http.Open "GET", linkCot, False
   Http.Send


    Cells(lin, 2).Value = WorksheetFunction.Clean(Replace(Http.ResponseText, "Date,Open,High,Low,Close,Adj Close,Volume", ""))
   Cells(lin, 2).WrapText = False

Next

Application.DisplayAlerts = False
Range("B2:B" & ultLin).TextToColumns Comma:=True, DecimalSeparator:=".", ThousandsSeparator:=","
Application.DisplayAlerts = True


End Sub

Explicação do código acima (buscarCotacaoAtivos):

  • Em primeiro lugar precisamos ativar as referências “WinHTTP Services”, indo em Ferramentas > Referências, encontrando a caixinha correspondente e a ativando (OK), pois vamos precisar usá-la. Observe:
    Imagem1
  • Ela vai nos permitir acessar o site escolhido e informado depois sem precisar baixar o arquivo CSV correspondente, e analisar os dados de forma a importá-los diretamente para o Excel.
  • Vamos, então, dimensionar a variável Http como uma nova requisição http válida (HttpRequest), segundo essa biblioteca, onde informamos que queremos que ela seja acessada sem baixar os arquivos
  • Vamos também definir a variável ultLin, que vai corresponder à última linha preenchida da coluna A. Em outro post ensinamos detalhadamente como obter essa última linha no VBA
  • Definiremos uma variável de referência dataAgora, com a diferença da data atual para a data de 1 de Janeiro de 1970 (função DateDiff no VBA), que é a referência “zero” do site Yahoo Finance para guardar as cotações, e será usada como auxiliar do nosso link
  • Começaremos uma estrutura de repetição For, que explicamos mais detalhadamente nesse post, onde iremos repetir as mesmas ações da linha 2 até a última linha preenchida da coluna A (dada pela variável ultLin). Vamos, então:
    • Armazenar o link a ser acessado na Yahoo Finance na variável linkCot, usando a variável auxiliar de dataAgora concatenada com o resto do link pelo operador & no VBA
    • Dizer que queremos abrir o objeto Http e pegar a informação contida no linkCot, com a última instrução como False para dizer que queremos esperar ele pegar a informação para ir para a próxima linha de código
    • Vamos enviar o comando para o objeto Http de fato, porque antes (linha anterior de código) só o configuramos
    • Armazenaremos na célula sempre na 2ª coluna da nossa tabela, na linha dada pela variável lin da estrutura de repetição, fazendo a substituição do texto cabeçalho “Date,Open,High,Low,Close,Adj Close,Volume” (que aparece sempre e não queremos) por nada (“”), para que esse cabeçalho seja removido do texto de resposta do nosso comando Http.ResponseText. Além disso vamos aplicar a função TIRAR (Clean) para que seja removido um caracter de quebra de linha, desnecessário
      Imagem2
    • Além disso, podemos ver na imagem acima que o texto fica quebrado automaticamente. Vamos desativar isso pelo VBA colocando como False o estado da propriedade WrapText.
    • Vamos repetir essas ações para todos os ativos listados na coluna A, tendo como resultado parcial:
Pegar Cotações de Ações
  • Agora vemos que o resultado do código está em toda coluna B, e nossas informações precisam ser separados em colunas.
  • Vamos então usar o comando TextToColumns, com o detalhamento de propriedades:
    • Caractere separador: “,”
    • Separador de decimais: “.” (porque estamos lidando com um número em formato americano)
    • Separador de milhares: “,” (porque estamos lidando com um número em formato americano)
  • Repare que também vamos desativar os alertas antes de separar o texto em colunas, e ativar logo após, para que nenhuma caixa de alerta seja exibida
  • Assim se encerra o nosso código, com o seguinte resultado:
Pegar Cotações de Ações

Conclusão de Como Pegar Cotações Automaticamente

Chegamos ao fim dessa aula maneiríssima de VBA! Hoje você aprendeu como buscar ações com VBA!

Nessa aula você aprendeu a lidar com:

  • Macros VBA
  • Busca de cotações com VBA
  • Operador &
  • Texto para colunas no VBA
  • Desativar alertas do Excel pelo VBA
  • DateDiff (diferença entre datas)
  • Estrutura For VBA

Até o próximo post, pessoal! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel, VBA e Power BI toda semamna! Um abraço!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um Minicurso Gratuito?


Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador