Blog

Postado em em 27 de agosto de 2022

3 Dicas de VBA que Todos Deveriam Conhecer

Hoje eu quero te mostrar 3 dicas de VBA que todos deveriam conhecer para facilitar e agilizar seus projetos em VBA!

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

3 Dicas de VBA

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

3 Dicas de VBA que Você Precisa Conhecer

Fala, Impressionadores! Na aula e hoje eu quero te mostrar 3 dicas de VBA que todos deveriam conhecer.

A primeira dica é para separar strings no VBA (como separar textos no VBA) e ainda nessa primeira dica vamos separar textos com split no VBA, então teremos duas maneiras para fazer essa separação.

Na segunda dica nós vamos ler informações no VBA do Excel, ou seja, vamos ler informações do Excel, ler tabelas no VBA, mas sem a formatação de tabela.

Na terceira dica eu vou te mostrar como ler informações de forma rápida no VBA. Para essa parte vamos ler informações com matriz no VBA e você vai ver como um método pode ser mais rápido do que outro.

Além disso você vai aprender como calcular o tempo de execução do seu código para fazer comparações entre códigos.

Inserindo um Módulo no VBA

Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.

Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.

Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.

3 dicas de VBA

Por padrão ele terá o nome de “Módulo 1”. Colocaremos as seguintes sub dentro dele:

Dica 1) macro para separar textos

Sub separarTextos()

Dim texto As String, nome As String, sobrenome As String, email_texto As String, empresa As String

texto = "[email protected]"

priTraco = InStr(texto, "-")
segTraco = InStr(priTraco + 1, texto, "-")
terTraco = InStr(segTraco + 1, texto, "-")

nome = Left(texto, priTraco - 1)
sobrenome = Mid(texto, priTraco + 1, segTraco - priTraco - 1)
email_texto = Mid(texto, segTraco + 1, terTraco - segTraco - 1)
empresa = Right(texto, Len(texto) - terTraco)

Debug.Print nome
Debug.Print sobrenome
Debug.Print email_texto
Debug.Print empresa

End Sub

 Explicação do código acima:

  • Dimensionar:
  • Armazenar na variável “texto” o texto “[email protected]
  • Armazenar na variável “priTraco” o que for resultante da função InStr, que vai verificar partes de texto dentro de outro texto, e retornar a posição desse texto dentro de outro texto. No caso estamos localizando “-“ dentro do que foi armazenado na variável “texto”, e descobrir sua posição, que será igual a 6.
  • Armazenar na variável “segTraco” o que for resultante da função InStr, olhando a partir de uma posição além do primeiro traço (que vai ser ignorado), que vai resultar em 13
  • Armazenar na variável “terTraco” o que for resultante da função InStr, olhando a partir de uma posição além do segundo traço (que vai ser ignorado), que vai resultar em 29
  • Armazenar na variável “nome” o resultante da função Left, que vai pegar uma parte de um texto a partir da esquerda, por uma quantidade de caracteres específica. Nesse caso, vamos pegar o que estiver presente na variável “texto”, até a posição dada por “priTraco” menos 1, que vai resultar em 5 caracteres. Portanto, o resultado armazenado na variável “nome” será “Diego”
  • Armazenar na variável “sobrenome” o resultado da fórmula Mid, que vai retornar uma cadeia de textos a partir da posição do primeiro traço mais 1, e o ponto entre o primeiro espaço e o segundo traço menos 1 (limite da palavra). Portanto, o resultado armazenado na variável “sobrenome” será “Amorim”
  • Armazenar na variável “email_texto” o resultado da fórmula Mid, que vai retornar uma cadeia de textos a partir da posição do primeiro traço mais 1, e o ponto entre o segundo espaço e o terceiro traço menos 1 (limite da palavra). Portanto, o resultado armazenado na variável “email_texto” será “[email protected]
  • Armazenar na variável “empresa” algo que vai ser consequência da função Right, que vai pegar uma parte de um texto a partir da direita, por uma quantidade de caracteres específica, e a função Len, que vai pegar retornar a quantidade de caracteres numa palavra. Nesse caso, vamos pegar o que estiver presente na variável “texto”, do final da palavra, até o terceiro traço. Portanto, o resultado armazenado na variável “empresa” será “Hashtag”
  • Mostra o texto que está armazenado na variável “nome”
  • Mostra o texto que está armazenado na variável “sobrenome”
  • Mostra o texto que está armazenado na variável “email_texto”
  • Mostra o texto que está armazenado na variável “empresa”
  • Se encerra o código

Rodando o código acima, na janela de verificação imediata teremos:

3 dicas de VBA
Sub separarTextosSplit()

Dim texto As String, nome As String, sobrenome As String, email_texto As String, empresa As String
Dim matriz As Variant

texto = "[email protected]"

matriz = Split(texto, "-")

nome = matriz(0)

sobrenome = matriz(1)
email_texto = matriz(2)
empresa = matriz(3)

Debug.Print nome
Debug.Print sobrenome
Debug.Print email_texto
Debug.Print empresa

End Sub

Explicação do código acima:

  • Dimensionar:
    • as variáveis “texto”, “nome”, “sobrenome”, “email_texto” e “empresa” como String (tipo texto)
    • a variável “matriz” como Variant (“qualquer coisa”)
    • Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
  • Armazenar na variável “texto” o texto “[email protected]
  • Armazenar na variável “matriz” o resultado da função Split, que vai separar o que estiver presente na variável “texto”, considerando o delimitador “-“, e armazenar nos elementos da matriz (no caso 4 elementos)
  • Armazenar na variável “nome” o 1º elemento da matriz (elemento 0)
  • Armazenar na variável “sobrenome” o 2º elemento da matriz (elemento 1)
  • Armazenar na variável “email_texto” o 3º elemento da matriz (elemento 2)
  • Armazenar na variável “empresa” o 4º elemento da matriz (elemento 3)
  • Mostra o texto que está armazenado na variável “nome”
  • Mostra o texto que está armazenado na variável “sobrenome”
  • Mostra o texto que está armazenado na variável “email_texto”
  • Mostra o texto que está armazenado na variável “empresa”
  • Se encerra o código

Rodando o código acima, na janela de verificação imediata teremos:

3 dicas de VBA

Dica 2) código para ler informações de tabelas

Criaremos mais um módulo para separar as macros listadas abaixo.

Sub lerTabela()

Dim intervalo As Range

Set intervalo = Sheets("Tabela").Range("A1").CurrentRegion
Set intervalo = intervalo.Offset(1).Resize(intervalo.Rows.Count - 1)

Debug.Print intervalo.Address

End Sub

Explicação do código acima:

  • Dimensionar:
  • Configurar:
    • a variável “intervalo” para assumir o intervalo de células preenchidas a partir de A1, da aba “Tabela”
    • a variável “intervalo” para assumir o intervalo de células preenchidas a partir de A1, da aba “Tabela” deslocado de 1 linha para baixo (pelo comando Offset), redimensionando para receber a contagem de linhas – 1 (antes considerava o cabeçalho, agora como desceu 1 linha ficaria considerando apenas uma linha em branco no final, retirada)
  • Mostra o texto que está armazenado na propriedade Address da variável “intervalo”
  • Se encerra o código

Rodando o código acima, na janela de verificação imediata teremos:

3 dicas de VBA
Sub lerTabelaObjetos()

Dim tabela As ListObject
Dim intervalo As Range

Set tabela = Sheets("TabelaObjeto").ListObjects("TabelaVBA")
Set intervalo = tabela.DataBodyRange

Debug.Print intervalo.Address

End Sub

Explicação do código acima:

Rodando o código acima, na janela de verificação imediata teremos:

3 6

Dica 3) macro para gravar o tempo e informações em objetos diferentes: por tabela e por matriz

Criaremos mais um módulo para separar as macros listadas abaixo.

Sub lerInformacoes()

Dim tabela As ListObject

Dim atendimento As Long, codigo_cliente As Long
Dim tempoIni As Double

tempoIni = Timer * 1000

Set tabela = Sheets("TabelaObjeto").ListObjects("TabelaVBA")

For i = 1 To tabela.DataBodyRange.Rows.Count
   atendimento = tabela.ListRows(i).Range(1, 1).Value
   codigo_cliente = tabela.ListRows(i).Range(1, 2).Value
Next

Debug.Print (Timer * 1000) - tempoIni 'tempo em ms

End Sub

Explicação do código acima:

  • Dimensionar:
  • Armazenar na variável “tempoIni” o resultante da multiplicação entre a função Timer e o número 1000
  • Configurar a variável “tabela” para assumir o intervalo de células configurada para a tabela “Tabela VBA” da aba “TabelaObjeto”
  • Utilizar de uma estrutura de repetição do tipo For, que vai da volta (representada pela variável “i”) 1 até a quantidade (count) de linhas (rows) do intervalo de dados (data body) da tabela representada pela variável “tabela”, fazendo as ações a seguir:
    • Armazenar na variável “atendimento” o valor da célula de elemento coluna 1 e linha 1, da linha “i” da tabela
    • Armazenar na variável “codigo_cliente” o valor da célula de elemento coluna 2 e linha 1, da linha “i” da tabela
  • Mostra o texto resultante da subtração do marcador do momento e o tempo inicial, marcado por “tempoIni”, resultando no tempo de duração do código (em milissegundos)
  • Se encerra o código

Rodando o código acima, na janela de verificação imediata teremos:

4 6
Sub lerInformacoesMatriz()

Dim matriz As Variant
Dim atendimento As Long, codigo_cliente As Long
Dim tempoIni As Double

tempoIni = Timer * 1000

matriz = Sheets("TabelaObjeto").ListObjects("TabelaVBA").DataBodyRange

For i = LBound(matriz) To UBound(matriz)
   atendimento = matriz(i, 1)
   codigo_cliente = matriz(i, 2)
Next

Debug.Print (Timer * 1000) - tempoIni 'tempo em ms

End Sub

Explicação do código acima:

Rodando o código acima, na janela de verificação imediata teremos:

5 5

Conclusão

Nessa aula sobre 3 Dicas de VBA você aprendeu sobre:

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

Hashtag Treinamentos

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


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!