Blog

Postado em em 11 de setembro de 2021

Série Automação Web Aula6 – Estrutura de Repetição For Next no VBA

Essa é a Série Automação Web Aula6 onde vamos abortar a famosa estrutura de repetição For para facilitar o nosso trabalho na busca de preços!

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:

Essa é a Série Automação Web Aula6 e nessa aula nós vamos utilizar a famosa estrutura de repetição For no VBA.

Essa estrutura de repetição For Next vai permitir com que você consiga fazer a repetição do código no VBA quantas vezes precisar sem ter que escrever esse código repetido.

Imagine que tivéssemos 100 preços para buscar, você já pensou se fosse copiar e colar manualmente seu código 100 vezes? Nem faria sentido não é mesmo?

Por esse motivo é que temos a estrutura For no VBA (loop no VBA como também é conhecido).

Então poderemos interpretar quantas lojas tiverem (escolhemos apenas 3), e quantos produtos tiverem listados na nossa tabela, e nossa estrutura de repetição vai fazer as ações para vários produtos de forma igual, com objetivo igual.

Acompanhe com a gente o código responsável para fazer isso:

Sub ComparadorDePreco()


Set objIE = CreateObject("InternetExplorer.Application")


'objIE.Visible = True

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


For lin = 2 To ultLin
   menorPreco = ""

    For col = 6 To 8

        objIE.Navigate Cells(lin, col).Value

PassarErroEsperar:

        On Error GoTo Esperar

        If col = 6 Then 'Buscando o preço na Amazon
           precoProduto = CDbl(Replace(objIE.document.getElementById("price_inside_buybox").innerText, "R$ ", ""))

        ElseIf col = 7 Then 'Buscando o preço nas Lojas Americanas
           precoProduto = CDbl(Replace(objIE.document.getElementsByClassName("src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales")(0).innerText, "R$ ", ""))

        Else 'Buscando o preço na Magazine Luiza
          precoProduto = CDbl(objIE.document.getElementsByClassName("price-template__text")(0).innerText)

        End If

       On Error GoTo 0

        If menorPreco = "" Then

           menorPreco = precoProduto
            lojaMenorPreco = Cells(1, col).Value

        ElseIf precoProduto < menorPreco Then

           menorPreco = precoProduto
            lojaMenorPreco = Cells(1, col).Value

       End If
      
   Next col   

   Cells(lin, 3).Value = menorPreco 'Definindo o menor preço encontrado para o produto
   Cells(lin, 4).Value = lojaMenorPreco 'Definindo a loja que possui o menor preço  

Next lin


objIE.Quit

Set objIE = Nothing

Exit Sub

Esperar:
Application.Wait (Now + TimeValue("00:00:01"))
Resume PassarErroEsperar

End Sub

Explicação do código:

  • Nós vamos nos ater a explicação da parte de iteração da estrutura de repetição For Next no VBA
  • Começaremos pegando a última linha (ultLin) preenchida da nossa planilha, indo na linha 1000000 e coluna B e dando um Ctrl seta para cima. Pegaremos a linha em que o Excel selecionar, que representará a última linha (da célula) preenchida da coluna B
  • Vamos iniciar nossa primeira estrutura de repetição For apontando que queremos percorrer da linha 2 da nossa planilha (primeiro produto) até a última linha da planilha, dada pela variável ultLin
  • Vamos definir a variável menorPreco no início como vazio, para que ela seja objeto de comparação mais para frente no código
  • Levando em consideração as correspondências dadas pelas colunas, sendo A = 1 e crescendo uma unidade a cada letra, queremos percorrer da coluna 6 até a coluna 8, onde se encontram os links das nossas lojas
  • Então inicia-se a nossa 2ª estrutura de repetição For Next no VBA, que vai percorrer essas colunas a cada volta do loop.
  • Vamos navegar, a cada coluna (col) alvo, e cada linha (lin) alvo, navegando até aquela página, fazer o tratamento de erros caso a página ainda não esteja pronta e carregada para ter a informação retirada de forma completa
  • Usaremos de uma estrutura de comparação If que vai ler a variável col a fim de entender qual a loja, e qual link acessar, especificamente.
  • Estando na coluna 6, vamos acessar o link da Amazon; estando na coluna 7 vamos acessar o link das Lojas Americanas; estando na coluna 8 vamos acessar o link da Magazine Luiza
  • A cada acesso vamos armazenar o preço obtido daquele site/link na variável (única dessa vez) precoProduto
  • Em seguida vamos fazer duas comparações através da Estrutura If: a) se o preço é vazio, vamos armazenar o preço encontrado incialmente na variável menorPreco, porque ele será o menor preço se comparado a vazio
  • Após a primeira volta da primeira linha de produto (após a 2ª linha da tabela) e a primeira coluna de links (coluna 6), vamos ter um segundo precoProduto conseguido porque estaremos analisando o mesmo produto em questão, só que para a 2ª e a 3ª lojas. Então, precisaremos comparar esse “novo” precoProduto a cada loja com o menorPreco da 1ª loja, ou a cada iteração da mesma linha (cada produto)
  • A partir do estabelecimento de um menorPreco, registraremos na variável lojaMenorPreco o nome da loja que detém o menor preço encontrado, que é representada pela mesma coluna em questão daquele preço e volta do loop, e 1ª linha da tabela.
  • Assim, poderemos ir para a próxima coluna, pegar novos preços, fazer novas comparações de menorPreco
  • Ao final das iterações nas colunas (lojas):
    • vamos registrar na linha do produto em questão (variável lin), na coluna 3 (coluna C) o menorPreco encontrado entre as 3 lojas, para aquele produto
    • vamos registrar na linha do produto em questão (variável lin), na coluna 4 (coluna D) a lojaMenorPreco encontrado entre as 3 lojas, para aquele produto
  • Assim poderemos ir para a próxima linha, ou seja, novo produto, percorrer novamente as colunas das lojas, até que se encerrem as linhas de produtos
  • E assim o código se encerra normalmente, como nas últimas

Conclusão da Série Automação Web Aula6

Na aula  de hoje vimos como aproveitar de uma estrutura de repetição For no VBA para fazer ações repetidas para várias linhas e várias colunas.

Conseguimos atingir o nosso objetivo, que era acessar as 3 lojas para cada produto e adquirir o menor preço, assim registrando qual preço e qual coluna.

Além dessa estrutura de já vamos aproveitar no Web scraping no VBA para aplicar também a função If no VBA (If Else no VBA) que é outra função muito utilizada para fazer verificações.

.

Até a próxima, pessoal! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel e VBA toda semana para você! Um abraço!

Hashtag Treinamentos

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


Quer aprender mais sobre VBA com um Minicurso Gratuito?


Quer participar do maior evento de Power BI da América Latina? Só preencher seu e-mail abaixo que sua vaga estará garantida!